Як знайти найближче місто для POI в базі даних OpenStreetMap / PostGIS?


9

Мені цікаво знайти додаткові дані для POI в базі даних OSM.

В даний час я можу використовувати наступний SQL для отримання імені + long + lat для всіх 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'

Я також хотів би, щоб назва найближчого міста / міста чи містечка / міста, в якому знаходиться POI.


У вас уже встановлена ​​система зворотного геокодування (місцеположення до імені)?
BradHards

Відповіді:


3

не зовсім відповідь, яку я хотів, але застосований у додатку: створити запит до Nominatim

http://nominatim.openstreetmap.org/search?q=45.8364043,24.8345179&format=xml&addressdetails=1


Якщо це відповідає на ваше запитання, будь-ласка, позначте його як відповідь (сіра галочка нижче підрахунку голосів).
Чад Купер

0

Відповідь витягнуто із пов’язаного питання :

Досить легко припустити, що у вас є lat / lngs.

  1. Перетворять lat / lng в сітку даних осма
  2. Обчисліть відстань до всіх POI, які вам цікаві в базі даних.
  3. Підберіть ряд з найменшою відстані.
  4. Крім того, ви можете обмежити пошук у радіусі, що цікавить (скажімо, 5 КМ ..)

Як приклад, давайте знайдемо 5 найближчих АЗС біля нашої POI.

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.