Wie finde ich die nächstgelegene Stadt für einen POI in einer OpenStreetMap / PostGIS-Datenbank?


9

Ich bin daran interessiert, zusätzliche Daten für die POIs in der OSM-Datenbank zu finden.

Derzeit kann ich das folgende SQL verwenden, um den Namen + long + lat für alle POIs zu erhalten

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'

Ich möchte auch den Namen der nächstgelegenen Stadt oder des Ortes haben, in dem sich der POI befindet.


Haben Sie bereits ein Reverse-Geocodierungssystem (Standort zu Name) eingerichtet?
BradHards

Antworten:



0

Antwort aus einer verwandten Frage gezogen :

Ziemlich einfach vorausgesetzt, Sie haben die lat / lngs.

  1. Konvertieren Sie lat / lng in den osm data srid
  2. Berechnen Sie die Entfernung zu allen POIs, die Sie in der Datenbank interessieren.
  3. Wählen Sie die Reihe mit dem geringsten Abstand.
  4. Darüber hinaus möchten Sie Ihre Suche möglicherweise auf einen Radius von Interesse beschränken (z. B. 5 km).

Lassen Sie uns als Beispiel 5 nächstgelegene Tankstellen in der Nähe unseres POI finden.

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;

Ergebnismenge

-[ 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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.