ในที่สุดฉันก็เข้าใจวิธีการทำ 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;