Distance 如何使用Openlayers 3计算圆边界的坐标
我有一个给定半径的点特征,比如说1000米。我计算造型函数内部的半径,如下所示:Distance 如何使用Openlayers 3计算圆边界的坐标,distance,openlayers-3,geometry,point,Distance,Openlayers 3,Geometry,Point,我有一个给定半径的点特征,比如说1000米。我计算造型函数内部的半径,如下所示: var givenRadius = 1000; var coords = feature.getGeometry().getCoordinates(); var projection = map.view.getProjection(); var resolutionAtCoords = projection.getPointResolution(re
var givenRadius = 1000;
var coords = feature.getGeometry().getCoordinates();
var projection = map.view.getProjection();
var resolutionAtCoords = projection.getPointResolution(resolution, coords);
var featureStyleRadius = Math.round(radius / resolutionAtCoords);
style.getImage().setRadius(featureStyleRadius);
显示的圆看起来不错-我通过在地图上测量其半径来检查它
现在我想在它上面做两个标记-在它的中心和边界上。我是这样做的:
var center = ol.proj.transform([lon,lat], 'EPSG:4326', 'EPSG:3857');
// center point
map.previewLayer.getSource().addFeature(new ol.Feature({
geometry: new ol.geom.Point(center),
type: "dragPoint"
})
);
// border point
center[0] += givenRadius;
map.previewLayer.getSource().addFeature(new ol.Feature({
geometry: new ol.geom.Point(center),
type: "dragPoint"
})
);
中心标记的位置正确,但边界标记始终位于圆内(约为其半径的2/3,与半径大小或地图缩放无关)-请参见图片。计算有什么问题
根据代码外观,您正在使用
givenRadius
和resolutionCoords
计算圆半径。但是,在计算边界点时,您正在将硬编码的givenRadius
添加到center
。因此,每次它向中心增加1000米。
相反,您必须将featureStyleRadius
添加到center
center[0] += featureStyleRadius;
看起来问题与EPSG:3857投影相关的地图失真有关。我通过将中心坐标转换为EPSG:4326,计算此投影中的边界点位置并转换回EPSG:3857解决了这个问题。这样做会将点精确地放置在边界上。我认为,这是正确的-中心变量包含坐标-根据投影,它以米为单位。这就是为什么我要加上1000米的半径——我希望这能给我边界的地理坐标。关于圆,OpenLayers不能以米为单位指定圆半径-必须使用屏幕像素。这就是为什么我每次在样式设置函数中都会重新计算圆的半径。如果使用的投影单位为米,则创建
ol.geom.circle
时的radius
选项也将仅以米为单位。因此,您使用resolutionacoords
Sumanth不必要地计算半径-这对我来说是一个有趣的信息。我没有“动态”创建我的特征,我使用geojson作为源,geomerty类型是“点”(据我所知geojson没有圆几何类型),我通过点的样式指定半径。由于这是一个大约有1年历史的项目,因此该样式的半径被认为是以像素为单位的(在缩放操作期间它没有变化),这就是我使用calculation.Hi的原因。我也面临同样的问题。你能把答案贴出来吗?