我有一个给定半径的点要素 - 比方说1000m。我计算半径喜欢我的造型函数中:如何使用Openlayers计算圆形边框的坐标3
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);
显示圈看起来不错 - 我通过测量在地图上它的半径检查它。
现在我想在它的中心和边界上放上2个标记。我不喜欢这样写道:
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无论半径大小或地图缩放) - 看到的景象。计算有什么问题?
我认为,这是正确的 - 中心变量包含坐标 - 根据投影以米为单位。这就是为什么我添加1000米的给定半径 - 我期望给我的边界地理坐标。关于圆圈,OpenLayers无法以米为单位指定圆半径 - 您必须使用屏幕像素。这就是为什么我每次在造型函数内重新计算圆的半径。 – user3523426
如果使用的投影以米为单位,则创建“ol.geom.Circle”时的“半径”选项也将仅以米为单位。所以你不必要地使用'resolutionAtCoords'计算半径。 –
Sumanth - 这对我来说是有趣的信息。我不创建我的功能“飞”,我有geojson作为源,几何类型是“点”(据我所知geojson没有圆几何类型),我指定半径通过风格的点。由于这是一个大约1年的项目,因此样式的半径被认为是以像素为单位的(在缩放操作期间它不会改变),这就是我使用计算的原因。 – user3523426