Qual è il modo migliore per eseguire la geocodifica inversa con PostGIS?


13

Esiste un modo per eseguire la geocodifica inversa con PostGIS? Ci sono molte informazioni sul Web ma l'ho trovato molto confuso ...

Ho importato i dati osm nel mio Postgres con il database PostGIS. Ora voglio fare geocoding e invertire geocoding con il mio database. Non so se ci sono alcune Stored Procedure o un progetto da qualche parte che si occupa del mio problema.

Il prossimo passo che voglio fare è creare un servizio web in grado di gestire questo tipo di richieste, ma questa è un'altra domanda.


Ci sono alcuni risultati quando cerchi su questo sito la geocodifica inversa. Una risposta che spicca è questa sui servizi che la forniscono.
Dassouki,

La tua domanda è un po 'vaga. C'è un problema particolare che stai riscontrando? O hai bisogno di aiuto con l'approccio generale per invertire la geocodifica?
Sean,

Ho già provato a usare Nominatim, ma ho avuto problemi con l'output "gazetteer". Emette un "Errore di segmentazione" ogni volta che importare i dati osm.
Joaquín M,

Risposte:


14

Infine, capisco il modo di fare geocode e invertire geocode con il mio database PostGIS. Ho creato una procedura memorizzata che trova tipi di geometria vicini a un punto. Questa procedura memorizzata utilizza la funzione di distanza per ottenere i punti più vicini. Successivamente, ho creato un'API RESTful che chiama questa procedura memorizzata per risolvere le richieste di geocodifica inversa.

Correggimi se sbaglio, ma ho capito che il progetto Nominatim crea un'API per i database che sono stati importati da OSM. Quindi non è necessario creare alcuna procedura memorizzata per geocodifica inversa e geocodifica. Inoltre non è necessario effettuare alcun servizio web per risolvere le richieste attraverso il web.

Spero che questo aiuti qualcuno.

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; 

Possiamo vedere la procedura?
canisrufus,

Naturalmente: 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

Il geocoder tigre PostGIS 2.0 ha un geocoder inverso che utilizza i dati Tiger. Il geocoder verrà installato correttamente su PostGIS 1.5 8.4+ o versione successiva.

Se sei negli Stati Uniti, potrebbe essere il più facile da usare poiché è tutto impacchettato come funzioni plpgsql.

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


Grazie. Non avevo bisogno delle informazioni statunitensi per il geocodice inverso. Ora ho capito come funziona il geocodice inverso con i database PostGIS. Molte grazie.
Joaquín M,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.