Énoncé du problème: étant donné un itinéraire de bus (défini comme une ligne de ligne dans le_leom) et un ensemble d'emplacements d'arrêts de bus (pt1.the_geom, pt2.the_geom, ... ptn.the_geom), divisez l'itinéraire de bus en segments entre les arrêts de bus . J'utilise deux fonctions postgis
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))
Ce qui précède fonctionne bien si l'itinéraire de bus n'a pas de sections qui se chevauchent. Cependant, s'il y a des sections qui se chevauchent, le ST_line_locate_point accrochera un point à l'autre extrémité de la chaîne de lignes. À titre d'exemple: le bus se déplace de A à B, fait une boucle, puis se déplace de B à A. «A à B» et «B à A» sont des itinéraires parallèles avec tous les points se chevauchant. En cas d'arrêts de bus P1 et P2, P2 est mappé au point P2 'à la place (dans la direction opposée). Le segment est extrait à tort dans ce cas (où des segments supplémentaires sont inclus).
Comment résoudre des problèmes comme celui-ci? Les itinéraires de bus qui se chevauchent peuvent se produire à n'importe quelle section de l'itinéraire ...
la source
Réponses:
En supposant que l'itinéraire de bus ne se chevauche pas plus de 2 fois à un point donné, cela pourrait être résolu en inversant la ligne pour le deuxième point de localisation de ligne, en localisant le point le plus proche le plus proche de la fin de la ligne. Vous devrez soustraire cela de 1 pour l'utiliser dans la requête ST_LineSubstring. Par exemple
la source