OpenStreetMap / PostGISデータベースでPOIに最も近い都市を見つける方法は?


9

OSMデータベースでPOIの追加データを見つけることに興味があります。

現在、次のSQLを使用して、すべてのPOIのname + long + latを取得できます

SELECT name, 
         x(transform(way, 4326)) AS lon, 
         y(transform(way, 4326)) AS lat
  FROM planet_osm_point 
  WHERE tourism='museum'
UNION
  SELECT name, 
         x(centroid(transform(way, 4326))) AS lon, 
         y(centroid(transform(way, 4326))) AS lat
  FROM planet_osm_polygon 
  WHERE tourism='museum'

また、POIが置かれている最寄りの町または都市の名前も教えてください。


逆ジオコーディング(場所から名前へ)システムがすでに設定されていますか?
BradHards

回答:



0

関連する質問からの回答:

lat / lngsがあると仮定すると、かなり簡単です。

  1. lat / lngをosmデータsridに変換します
  2. データベースで気になるすべてのPOIまでの距離を計算します。
  3. 距離が最小の行を選択してください。
  4. さらに、検索範囲を関心のある半径に限定することもできます(5 KMなど)。

例として、POIの近くに最も近い5つのガソリンスタンドを見つけましょう。

SELECT osm_id,
       name,
       brand,
OPERATOR,
       ST_Distance(barabara_point.way, st_transform( st_setsrid(st_makepoint(36.768676, -1.289927), 4326), 900913)) AS distance
FROM barabara_point
WHERE ST_DWithin(barabara_point.way, st_transform( st_setsrid(st_makepoint(36.768676, -1.289927), 4326), 900913), 5000)
  AND amenity = 'fuel'
ORDER BY distance;

結果セット

-[ RECORD 1 ]--------------
osm_id   | 1334386299
name     |
brand    | Kobil
operator |
distance | 244.544617525396
-[ RECORD 2 ]--------------
osm_id   | 915386940
name     | BP
brand    |
operator |
distance | 1012.76398108684
-[ RECORD 3 ]--------------
osm_id   | 1916188670
name     | Shell
brand    |
operator |
distance | 1160.48349020106
-[ RECORD 4 ]--------------
osm_id   | 558923017
name     | Kenol
brand    |
operator |
distance | 1310.22002620899
-[ RECORD 5 ]--------------
osm_id   | 30092081
name     | Caltex
brand    |
operator |
distance | 1419.61102322244
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.