วิธีค้นหาเมืองที่ใกล้ที่สุดสำหรับจุดที่น่าสนใจในฐานข้อมูล 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 เป็น srid data osm
  2. คำนวณระยะทางไปยังจุดที่น่าสนใจทั้งหมดที่คุณสนใจในฐานข้อมูล
  3. เลือกแถวด้วยระยะทางที่เล็กที่สุด
  4. นอกจากนี้คุณอาจต้องการ จำกัด การค้นหาของคุณให้อยู่ในรัศมีที่น่าสนใจ (พูด 5 KM .. )

ตัวอย่างเช่นลองค้นหาสถานีบริการน้ำมันที่ใกล้ที่สุด 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;

resultset

-[ 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.