Planteamiento del problema: dada una ruta de autobús (definida como una cadena lineal ln.the_geom), y un conjunto de ubicaciones de paradas de autobús (pt1.the_geom, pt2.the_geom, ... ptn.the_geom), divida la ruta de autobús en segmentos entre paradas de autobús . Estoy usando dos funciones 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))
Lo anterior funciona bien si la ruta del autobús no tiene secciones superpuestas. Sin embargo, si hay secciones superpuestas, ST_line_locate_point ajustará un punto al otro extremo de la cadena lineal. Como ejemplo: el autobús viaja de A a B, realiza un bucle, luego viaja de B a A. "A a B" y "B a A" son rutas paralelas con todos los puntos superpuestos. En el caso de las paradas de autobús P1 y P2, P2 se asigna en el punto P2 'en su lugar (en la dirección opuesta). El segmento se extrae incorrectamente en este caso (donde se incluyen segmentos adicionales).
¿Cómo resolver problemas como este? Las rutas de autobús superpuestas pueden ocurrir en cualquier sección de la ruta ...
fuente
Respuestas:
Suponiendo que la ruta del autobús se solape no más de 2 veces en cualquier punto dado, esto podría resolverse invirtiendo la línea para el punto de localización de la segunda línea, localizando el punto más cercano al final de la línea. Deberá restar esto de 1 para usar en la consulta ST_LineSubstring. P.ej
fuente