วิธีที่ดีที่สุดในการทำ Reverse Geocoding กับ PostGIS คืออะไร


13

มีวิธีการทำ Reverse Geocoding ด้วย PostGIS หรือไม่? มีข้อมูลมากมายบนเว็บ แต่ฉันพบว่ามันสับสนมาก ...

ฉันได้นำเข้าข้อมูล osm ไปยัง Postgres ของตัวเองด้วยฐานข้อมูล PostGIS ตอนนี้ฉันต้องการทำการเข้ารหัสทางภูมิศาสตร์และย้อนกลับการเข้ารหัสทางภูมิศาสตร์ด้วยฐานข้อมูลของฉัน ฉันไม่ทราบว่ามีบางขั้นตอนการจัดเก็บหรือโครงการที่ดูแลปัญหาของฉัน

ขั้นตอนถัดไปที่ฉันต้องการทำคือสร้างเว็บเซอร์ที่สามารถจัดการกับคำขอประเภทนี้ได้ แต่นั่นเป็นอีกคำถามหนึ่ง


มีผลลัพธ์เล็กน้อยเมื่อคุณค้นหาในเว็บไซต์นี้เพื่อดูรหัสภูมิศาสตร์ย้อนกลับ คำตอบหนึ่งที่ยืนออกเป็นหนึ่งในนี้เกี่ยวกับการบริการที่ให้มัน
dassouki

คำถามของคุณค่อนข้างคลุมเครือ มีปัญหาอะไรที่คุณกำลังประสบอยู่ไหม? หรือคุณต้องการความช่วยเหลือเกี่ยวกับวิธีการทั่วไปในการกลับรหัสภูมิศาสตร์?
ฌอน

ฉันได้ลองใช้ Nominatim แล้ว แต่ฉันมีปัญหาในการใช้เอาต์พุต "gazetteer" มันจะพ่น "การแบ่งกลุ่มผิด" ทุกครั้งที่ฉันนำเข้าข้อมูล osm
Joaquín M

คำตอบ:


14

ในที่สุดฉันก็เข้าใจวิธีการทำ geocode และ reverse geocode ด้วยฐานข้อมูล PostGIS ของฉัน ฉันสร้างกระบวนงานที่เก็บไว้ซึ่งค้นหาประเภทรูปทรงเรขาคณิตที่อยู่ใกล้จุดหนึ่ง กระบวนงานที่เก็บไว้นี้ใช้ฟังก์ชันระยะทางเพื่อรับจุดที่ใกล้ที่สุด หลังจากนั้นฉันได้สร้าง RESTful API ที่เรียกขั้นตอนที่เก็บไว้นี้เพื่อแก้ไขคำขอ Reverse Geocoding

แก้ไขให้ถูกต้องหากฉันผิด แต่ฉันเข้าใจว่าโครงการ Nominatim สร้าง API สำหรับฐานข้อมูลที่นำเข้าจาก OSM ดังนั้นคุณไม่จำเป็นต้องสร้างโพรซีเดอร์ที่เก็บไว้สำหรับ geocoding ย้อนกลับและ geocoding นอกจากนี้คุณไม่ต้องทำเว็บเซอร์เพื่อแก้ไขคำขอผ่านเว็บ

หวังว่านี่จะช่วยใครซักคน

CREATE OR REPLACE FUNCTION reverse_geocode (lat double precision, lon double precision)
RETURNS text AS 
$BODY$ 
declare  point geometry;  rec record;  geocode text; 
begin  
    point := geomfromtext('POINT('||lat||' '||lon||')', 4326);  
    select name, distance(way, point) as dist  
    into rec  from mapserverdb_point  
    order by dist asc limit 1;  
    geocode := rec.name;  
    return geocode; 
end; 
$BODY$   
LANGUAGE plpgsql; 

เราสามารถดูขั้นตอนได้หรือไม่
canisrufus

แน่นอน: CREATE OR REPLACE FUNCTION reverse_geocode(lat double precision, lon double precision) RETURNS text AS $BODY$ declare point geometry; rec record; geocode text; begin point := geomfromtext('POINT('||lat||' '||lon||')', 4326); select name, distance(way, point) as dist into rec from mapserverdb_point order by dist asc limit 1; geocode := rec.name; return geocode; end; $BODY$ LANGUAGE plpgsql;
Joaquín M

4

PostCIS 2.0 Tiger Geocoder มี Reverse Geocoder ที่ใช้ข้อมูล Tiger Geocoder จะติดตั้งได้ดีบน PostGIS 1.5 8.4+ ขึ้นไป

หากคุณอยู่ในสหรัฐอเมริกาอาจใช้งานง่ายที่สุดเนื่องจากเป็นแพคเกจทั้งหมดในรูปแบบฟังก์ชั่น plpgsql

http://www.postgis.org/documentation/manual-svn/Extras.html#Tiger_Geocoder http://www.postgis.org/documentation/manual-svn/Reverse_Geocode.html


ขอบคุณ ฉันไม่ต้องการข้อมูลในสหรัฐอเมริกาสำหรับ Reverse Geocode ตอนนี้ฉันเข้าใจวิธีการทำงานของ Reverse Geocode กับฐานข้อมูล PostGIS แล้ว ขอบคุณมาก.
Joaquín M
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.