私は与えられた半径のポイントフィーチャを持っています。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);
表示される円がOKに見える - 私は地図上の半径を測定することによって、それをチェックする:私は、私のようなスタイリング機能の内半径を計算します。
ここでは、センターと境界に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日)は - 絵を参照してください。計算に何が問題なのですか?あなたはgivenRadius
とresolutionAtCoords
を使用して円の半径を計算しているコードの見た目によって
私はそれが正しいと思う - 中心変数は座標を含んでいます - それはメートルでの投影に従って。だからこそ私は1000mの半径を加えました - 私は境界線の地理的座標を与えたいと考えています。サークルに関して、OpenLayersは円の半径をメートルで指定することはできません。スクリーンのピクセルを使用する必要があります。だから私は、スタイリング機能の中でサークルの半径を毎回再計算します。 – user3523426
使用されている投影がメートルの場合、 'ol.geom.Circle'を作成する際の' radius'オプションはメートル単位でのみ取得されます。だからあなたは不必要に 'resolutionAtCoords'を使って半径を計算しています –
Sumanth - それは私にとって興味深い情報です。 Geojsonの種類は「点」です(geojsonには円のジオメトリタイプはありません)。点のスタイルで半径を指定します。これは約1歳のプロジェクトなので、スタイルの半径はピクセル単位であるとみなされました(ズーム操作中は変化しません)。そのため、計算を使用しています。 – user3523426