参照場所から特定の距離 (10 マイルなど) 内にある POI のリストを取得できる OpenStreetMap の API はありますか?
3 に答える
私の知る限り、API はこれを直接サポートしていません。最も簡単な方法は、円が収まる(準) 長方形の境界ボックスを選択し、これを使用して POI を取得することです。次に、関心のある各ポイントまでの距離計算を行い、半径を超えるものを破棄できます。これにより、ボックスの角の近くにある POI のごく一部が削除され、円の中にありません。比較的少数のターゲット ロケーションでのみ距離計算を実行する必要があるように、この順序で実行する必要があります。
境界ボックスは緯度/経度のコーナーによって定義されるため、真の長方形ではないことを忘れないでください。経線は極で収束するため、ボックスの上部と下部の幅は同じではありません。これがどの程度影響するかは、極にどれだけ近いかによって異なります (経度 ~= (40000km / 360) * cos (緯度))。
最高の精度を必要としない場合は、ピタゴラスの定理を使用して距離を計算し、経度のコサイン変動と係数 2 単位の差 (経度 360 度、緯度 180 のみ) を覚えておきます。精度が必要な場合は、球面三角法の領域に入り、楕円体地球も考慮する必要があります。これはオンライン計算機で、方程式とオープン ソース コードを完備しており、この点で役立ちます。
はい。Overpass API には、まさにこれを行う "Around" 機能があります (指定されたポイントの半径内のアイテムを検索します)。それを他の要件と組み合わせることができます (たとえば、特定の項目タイプのリストを取得するため)。
http://wiki.openstreetmap.org/wiki/Overpass_API#Around
たとえば、OverPass Turbo Api を使用します (「スペインのマンサナレス」の近くにある緯度と経度が半径 150 Km のすべての町を一覧表示し、ライブで試してみてください!):
<osm-script output="json" timeout="25">
<id-query {{nominatimArea:Spain}} into="area"/>
<query type="node">
<has-kv k="place" modv="" v="town"/>
<around lat="38.996507" lon="-3.371946" radius="150000"/>
</query>
<print e="" from="_" geometry="skeleton" limit="" mode="body" n="" order="id" s="" w=""/>
</osm-script>