Problemstellung: Teilen Sie die Busroute bei einer gegebenen Busroute (definiert als Linienfolge in der Bushaltestelle) und einer Reihe von Bushaltestellen (pt1.the_geom, pt2.the_geom, ... ptn.the_geom) in Segmente zwischen Bushaltestellen auf . Ich benutze zwei Postgis-Funktionen
ST_line_substring(ln.the_geom,ST_line_locate_point
ln.the_geom,pt1.the_geom),ST_line_locate_point(ln.the_geom,pt2.the_geom))
Das oben Genannte funktioniert gut, wenn die Busroute keine überlappenden Abschnitte aufweist. Wenn sich Abschnitte überlappen, fängt der ST_line_locate_point jedoch einen Punkt am anderen Ende der Linienfolge. Beispiel: Der Bus fährt von A nach B, bildet eine Schleife und fährt dann von B nach A. "A nach B" und "B nach A" sind parallele Routen, bei denen sich alle Punkte überlappen. Bei den Bushaltestellen P1 und P2 wird P2 stattdessen auf den Punkt P2 'abgebildet (in der entgegengesetzten Richtung). In diesem Fall wird das Segment falsch extrahiert (wenn zusätzliche Segmente enthalten sind).
Wie kann man solche Probleme lösen? Die überlappenden Buslinien können auf jedem Streckenabschnitt vorkommen ...
quelle
Antworten:
Angenommen, die Busroute überlappt sich an einem bestimmten Punkt nicht öfter als zweimal, dann könnte dies gelöst werden, indem die Linie für den Ortungspunkt der zweiten Linie umgekehrt wird und der dem Ende der Linie nächstgelegene Punkt lokalisiert wird. Sie müssen diesen Wert von 1 subtrahieren, um ihn in der ST_LineSubstring-Abfrage zu verwenden. Z.B
quelle