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?
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:
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:
ST_Distance
ST_DWithin
ST_LineLocatePoint
(oder ST_Line_Locate_Point
für ältere Versionen von PostGIS) Tags und Links postgresql postgis