Cómo extraer la sublínea de una cadena de líneas con segmentos superpuestos

15

Declaración del problema: Dada una ruta de autobús (definida como una línea 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 del autobús en segmentos entre las 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 de líneas. Como ejemplo: el autobús viaja de A a B, hace un bucle y 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 autobuses superpuestas pueden ocurrir en cualquier sección de la ruta ...

    
pregunta user35469 06.08.2014 - 11:11

1 respuesta

1

Suponiendo que la ruta del bus se solape no más de 2 veces en un punto dado, entonces esto podría resolverse invirtiendo la línea para el punto de localización de la segunda línea, ubicando el punto más cercano al final de la línea. Deberá restar esto de 1 para usarlo en la consulta ST_LineSubstring. Por ejemplo,

ST_LineSubstring(ln.the_geom,
  ST_LineLocatePoint(ln.the_geom, pt1.the_geom),
  1 - ST_LineLocatePoint(ST_Reverse(ln.the_geom), pt2.the_geom))
    
respondido por el Nathan Lawrence 18.10.2016 - 14:17

Lea otras preguntas en las etiquetas