Finden Sie die nächstgelegenen Punkte entlang der Linienfolge in der angegebenen Entfernung und Reihenfolge

8

Ich habe ein solches Problem und ich wäre nett wenn mir jemand helfen könnte. Ich habe eine Punkte-Tabelle mit GIST-Index. Diese Punkte ändern sich nicht im Laufe der Zeit.

Ich möchte Punkte sammeln, die in der Nähe einer gegebenen Linienfolge liegen. Beispiel: Stellen Sie sich vor, dass Linienstriche die Straße sind und Punkte entlang der Straße sind. Ich möchte Pois holen, die 5 km von der angegebenen Straße entfernt sind. Ich möchte diese pois in der richtigen Reihenfolge holen (Fahrauftrag entlang der Straße). Sieh dir das Bild an:

Für die gegebene Straße von Punkt 1 bis 5 möchte ich POIs holen, die in 5 km maximal von der Straße und in der Reihenfolge von Punkt 1 bis 5 entlang der Straße sind. Das Ergebnis sollte also lauten:

%Vor%

Dies sollte mir sagen, welchen POI ich während der Fahrt entlang der Straße mit minimalen Kosten besuchen kann.

Hat jemand ein paar Ideen, wie man das mit Postgre und Postgiven macht?

    
Marcin Kapusta 23.04.2012, 19:24
quelle

2 Antworten

8

Angenommen, Sie haben Geometriespalten geom , die eine projizierte SRID von Metern in den Tabellen road (LINESTRING) und poi (POINT) verwenden, um alle POIs innerhalb von 5 km Straße zu finden (ID = 123 ) sollte etwa so aussehen:

%Vor%

Der erste ORDER -Teil mit ST_LineLocatePoint verwendet einen Bruch zwischen 0.0 und 1.0, abhängig davon, wo sich der Punkt entlang der LINESTRING befindet. Wenn die Richtung der Straße "falsch" ist, fügen Sie DESC hinzu, um die Reihenfolge umzukehren. Der zweite ORDER-Teil basiert auf der Entfernung, die verwendet werden könnte, wenn der Punkt etwas über dem Anfang / Ende von LINESTRING liegt (wobei ST_LineLocatePoint jeweils 0.0 oder 1.0 zurückgeben würde).

Diese Abfrage funktioniert möglicherweise auch, wenn Sie den Typ geography mit Long / Latitude-Werten verwenden, da er automatisch Meter - nicht Grad - berechnet. Weitere Dokumente finden Sie in der Dokumentation:

Mike T 24.04.2012, 00:31
quelle
0

Es klingt, als könnten Sie von der KNN-GIST-Funktion der PostgreSQL 9.1-Version vom letzten Sommer profitieren und von PostGIS Version 2.0 unterstützt werden.

Ссылка

    
kgrittn 23.04.2012 20:56
quelle

Tags und Links