Declaração do problema: dada uma rota de ônibus (definida como uma cadeia de linhas ln.the_geom) e um conjunto de locais de pontos de ônibus (pt1.the_geom, pt2.the_geom, ... ptn.the_geom), divida a rota de ônibus em segmentos entre as paradas de ônibus . Estou usando duas funções 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))
O exemplo acima funciona bem se a rota de ônibus não tiver seções sobrepostas. No entanto, se houver seções sobrepostas, o ST_line_locate_point encaixará um ponto na outra extremidade da cadeia de linhas. Como exemplo: o ônibus viaja de A para B, faz um loop e depois viaja de B para A. "A para B" e "B para A" são rotas paralelas com todos os pontos sobrepostos. No caso dos pontos de ônibus P1 e P2, P2 é mapeado no ponto P2 '(na direção oposta). O segmento é extraído incorretamente neste caso (onde segmentos extras estão incluídos).
Como resolver problemas como este? As rotas de ônibus sobrepostas podem acontecer em qualquer seção da rota ...
fonte
Respostas:
Supondo que a rota do ônibus se sobreponha não mais que 2 vezes em qualquer ponto, isso pode ser resolvido revertendo a linha para o segundo ponto de localização da linha, localizando o ponto mais próximo mais próximo ao final da linha. Você precisará subtrair isso de 1 para usar na consulta ST_LineSubstring. Por exemplo
fonte