Який найкращий спосіб зробити зворотне геокодування за допомогою PostGIS?


13

Чи є спосіб зробити зворотне геокодування за допомогою PostGIS? В Інтернеті є багато інформації, але я вважаю це дуже заплутаним ...

Я імпортував дані осми у свою власну Postgres із базою даних PostGIS. Тепер я хочу зробити геокодування та зворотне геокодування зі своєю базою даних. Я не знаю, чи є якісь збережені процедури чи проект десь вирішує мою проблему.

Наступним кроком, який я хочу зробити, є зробити веб-сервіс, який може обробляти такі запити, але це вже інше питання.


Під час пошуку на цьому сайті зворотного геокодування є кілька результатів . Один з відповідей, який виділяється, - це про послуги, які його надають.
dassouki

Ваше запитання трохи неясне. Чи є у вас певна проблема? Або вам потрібна допомога в загальному підході до зворотного геокодування?
Шон

Я вже намагався використовувати Nominatim, але у мене виникли проблеми з використанням "gazetteer". Він видає "помилку сегментації" щоразу, коли я імпортую дані осму.
Joaquín M

Відповіді:


14

Нарешті, я розумію спосіб зробити геокод та зворотний геокод за допомогою моєї бази даних 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; 

Чи можемо ми побачити процедуру?
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;
Хоакін М

4

GeoGoder тигра PostGIS 2.0 має зворотний геокодер, використовуючи дані тигра. Геокодер встановить штраф на 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


Спасибі. Мені не потрібна інформація про США для зворотного геокодування. Тепер я зрозумів, як працює зворотний геокод з базами даних PostGIS. Дуже дякую.
Хоакін M
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.