2017-02-06 20 views
0

私は与えられた半径のポイントフィーチャを持っています。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日)は - 絵を参照してください。計算に何が問題なのですか?あなたはgivenRadiusresolutionAtCoordsを使用して円の半径を計算しているコードの見た目によって

enter image description here

答えて

0

。しかし、ボーダーポイントを計算中にgivenRadiuscenterにハードコーディングして追加しています。だから毎回センターに1000メートルを追加します。 代わりにfeatureStyleRadiuscenterに追加する必要があります。

+0

私はそれが正しいと思う - 中心変数は座標を含んでいます - それはメートルでの投影に従って。だからこそ私は1000mの半径を加えました - 私は境界線の地理的座標を与えたいと考えています。サークルに関して、OpenLayersは円の半径をメートルで指定することはできません。スクリーンのピクセルを使用する必要があります。だから私は、スタイリング機能の中でサークルの半径を毎回再計算します。 – user3523426

+0

使用されている投影がメートルの場合、 'ol.geom.Circle'を作成する際の' radius'オプションはメートル単位でのみ取得されます。だからあなたは不必要に 'resolutionAtCoords'を使って半径を計算しています –

+0

Sumanth - それは私にとって興味深い情報です。 Geojsonの種類は「点」です(geojsonには円のジオメトリタイプはありません)。点のスタイルで半径を指定します。これは約1歳のプロジェクトなので、スタイルの半径はピクセル単位であるとみなされました(ズーム操作中は変化しません)。そのため、計算を使用しています。 – user3523426

0

EPSG:3857投影に関連するマップの歪みに関連するようです。私は中心座標をEPSG:4326に変換し、この投影の境界点の位置を計算し、EPSG:3857に変換することで問題を解決しました。このようにすると、ポイントが境界に正確に配置されます。

関連する問題