我有一個給定半徑的點要素 - 比方說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