Нарешті, я розумію спосіб зробити геокод та зворотний геокод за допомогою моєї бази даних PostGIS. Я зробив збережену процедуру, яка знаходить типи геометрії, які знаходяться біля точки. Ця збережена процедура використовує функцію відстані для отримання найближчих точок. Після цього я створив API RESTful, який викликає цю збережену процедуру для вирішення зворотних запитів геокодування.
Виправте мене, якщо я помиляюся, але я зрозумів, що проект Nominatim створює API для баз даних, імпортованих з OSM. Таким чином, вам не потрібно створювати будь-яку збережену процедуру для зворотного геокодування та геокодування. Крім того, вам не потрібно робити жодних веб-служб для вирішення запитів через Інтернет.
Сподіваюся, що це комусь допоможе.
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;