Was ist der beste Weg, um mit PostGIS eine umgekehrte Geokodierung durchzuführen?

13

Gibt es eine Möglichkeit, die Geokodierung mit PostGIS rückgängig zu machen? Es gibt viele Informationen im Web, aber ich fand es sehr verwirrend ...

Ich habe Osmodaten mit der PostGIS-Datenbank in mein eigenes Postgres importiert. Jetzt möchte ich mit meiner Datenbank Geocodierungen und umgekehrte Geocodierungen durchführen. Ich weiß nicht, ob es gespeicherte Prozeduren oder ein Projekt gibt, das sich um mein Problem kümmert.

Der nächste Schritt, den ich machen möchte, ist ein Webservice, der diese Art von Anfragen bearbeiten kann, aber das ist eine andere Frage.

Joaquín M
quelle
Es gibt einige Ergebnisse, wenn Sie auf dieser Site nach umgekehrter Geokodierung suchen. Eine Antwort , die auffällt, ist dies ein Thema , das sich zur Verfügung stellen.
Dassouki
Ihre Frage ist etwas vage. Gibt es ein bestimmtes Problem, das Sie haben? Oder benötigen Sie Hilfe bei der allgemeinen Herangehensweise an die umgekehrte Geokodierung?
Sean
Ich habe bereits versucht, Nominatim zu verwenden, aber ich hatte Probleme bei der Verwendung der "gazetteer" -Ausgabe. Es wird jedes Mal ein "Segmentierungsfehler" ausgegeben, wenn ich die Osmodaten importiere.
Joaquín M

Antworten:

14

Schließlich verstehe ich die Möglichkeit, Geocodierung und umgekehrte Geocodierung mit meiner PostGIS-Datenbank durchzuführen. Ich habe eine gespeicherte Prozedur erstellt, die Geometrietypen findet, die sich in der Nähe eines Punkts befinden. Diese gespeicherte Prozedur verwendet die Distanzfunktion, um die nächstgelegenen Punkte zu ermitteln. Danach habe ich eine RESTful-API erstellt, die diese gespeicherte Prozedur aufruft, um die Reverse-Geocodierungsanforderungen aufzulösen.

Korrigieren Sie mich, wenn ich falsch liege, aber ich habe verstanden, dass das Nominatim-Projekt eine API für Datenbanken erstellt, die aus OSM importiert wurden. Sie müssen also keine gespeicherte Prozedur für Reverse Geocoding und Geocoding erstellen. Außerdem müssen Sie keinen Webservice einrichten, um die Anforderungen über das Web zu lösen.

Hoffe das hilft jemandem.

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
quelle
Können wir den Vorgang sehen?
Canisrufus
Natürlich: 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

Der Tiger-Geocoder von PostGIS 2.0 verfügt über einen Reverse-Geocoder, der Tiger-Daten verwendet. Der Geocoder wird in PostGIS 1.5 8.4+ oder höher problemlos installiert.

Wenn Sie in den USA sind, ist dies möglicherweise die einfachste Verwendung, da alles als plpgsql-Funktionen verpackt ist.

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

LR1234567
quelle
Vielen Dank. Ich benötigte keine US-Informationen für den Reverse-Geocode. Jetzt verstehe ich, wie Reverse Geocode mit PostGIS-Datenbanken funktioniert. Danke vielmals.
Joaquín M