Bagaimana menemukan kota terdekat untuk POI di database OpenStreetMap / PostGIS?


9

Saya tertarik untuk mencari data tambahan untuk POI dalam database OSM.

Saat ini saya dapat menggunakan SQL berikut untuk mendapatkan nama + panjang + lat untuk semua POI

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'

Saya juga ingin memiliki nama kota / kota terdekat atau kota / kota tempat POI berada.


Apakah Anda sudah menyiapkan sistem geocoding terbalik (lokasi ke nama)?
BradHards

Jawaban:



0

Jawaban ditarik dari pertanyaan terkait :

Cukup mudah dengan asumsi Anda memiliki lat / lngs.

  1. Konversikan lat / lng ke srid data osm
  2. Hitung jarak ke semua POI yang Anda pedulikan dalam database.
  3. Pilih baris dengan jarak terkecil.
  4. Selain itu, Anda mungkin ingin membatasi pencarian Anda ke radius yang menarik (katakanlah 5 KM ..)

Sebagai contoh, mari temukan 5 pompa bensin terdekat di dekat POI kami.

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;

Rangkaian hasil

-[ 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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.