Наконец, я понимаю способ сделать геокод и обратный геокод с моей базой данных PostGIS. Я сделал хранимую процедуру, которая находит типы геометрии, которые находятся рядом с точкой. Эта хранимая процедура использует функцию расстояния для получения ближайших точек. После этого я создал RESTful API, который вызывает эту хранимую процедуру для разрешения обратных запросов геокодирования.
Поправьте меня, если я ошибаюсь, но я понял, что проект 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;