Làm cách nào để tìm thành phố gần nhất cho POI trong cơ sở dữ liệu OpenStreetMap / PostGIS?


9

Tôi quan tâm đến việc tìm kiếm dữ liệu bổ sung cho POI trong cơ sở dữ liệu OSM.

Hiện tại tôi có thể sử dụng SQL sau để lấy tên + long + lat cho tất cả các 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'

Tôi cũng muốn có tên của thị trấn / thành phố gần nhất hoặc thị trấn / thành phố mà POI tọa lạc.


Bạn đã có một hệ thống mã hóa địa lý đảo ngược (vị trí để đặt tên) được thiết lập chưa?
BradHards

Câu trả lời:



0

Trả lời rút ra từ một câu hỏi liên quan :

Khá dễ dàng giả sử bạn có lat / lngs.

  1. Chuyển đổi lat / lng sang srid dữ liệu osm
  2. Tính khoảng cách cho tất cả các POI mà bạn quan tâm trong cơ sở dữ liệu.
  3. Chọn hàng có khoảng cách nhỏ nhất.
  4. Ngoài ra, bạn có thể muốn giới hạn tìm kiếm của mình trong bán kính quan tâm (giả sử 5 KM ..)

Ví dụ: hãy tìm 5 trạm xăng gần nhất gần POI của chúng tôi.

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;

Kết quả

-[ 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.