OpenStreetMap / PostGIS 데이터베이스에서 POI에 가장 가까운 도시를 찾는 방법은 무엇입니까?


9

OSM 데이터베이스에서 POI에 대한 추가 데이터를 찾는 데 관심이 있습니다.

현재 모든 POI의 이름 + long + lat을 얻기 위해 다음 SQL을 사용할 수 있습니다

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

관련 질문 에서 가져온 답변 :

위도 / 경도를 가정하면 매우 쉽습니다.

  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.