Eu tenho um conjunto de linhas representando linhas de ônibus. Algumas das linhas estão sobrepostas e seguem as mesmas estradas.
Eu sou capaz de extrair os nós.
No entanto, estou interessado em extrair apenas cruzamentos como este:
Como posso fazer isso? Estou procurando maneiras com QGIS ou Python.
Eu tentei o método de interseção do GDAL Python, mas isso basicamente me retorna apenas os vértices.
O método Intersecções de linha do QGIS retorna as passagens se duas linhas se cruzarem. No entanto, no caso de duas linhas de ônibus percorrerem parte da rota na mesma estrada, isso não indica que eles apontam para onde se fundem.
Respostas:
Os nós:
Você deseja duas coisas: os pontos finais das polilinhas (sem nós intermediários) e os pontos de interseção. Há um problema adicional, alguns pontos finais das polilinhas também são pontos de interseção:
Uma solução é usar Python e os módulos Shapely e Fiona
1) Leia o shapefile:
2) Encontre os pontos finais das linhas ( como obter os pontos finais de uma polilinha? ):
3) Calcule as interseções (iterando através de pares de geometrias na camada com o módulo itertools ). O resultado de algumas interseções são MultiPoints e queremos uma lista de pontos:
4) Elimine duplicatas entre os pontos finais e os pontos de interseção (como você pode ver nas figuras)
5) Salve o shapefile resultante
Resultado final:
Os segmentos de linha
Se você quiser também os segmentos entre os nós, precisará "planarizar" ( Gráfico Planar , nenhuma aresta se cruza) no seu arquivo de forma. Isso pode ser feito pela função unary_union do Shapely
fonte
result = endpts.extend([pt for pt in inters if pt not in endpts])
pois parece que o.extend
método é modificadoendpt
. No meu casoresult = None
depois dessa operação. Éendpts
que acaba contendo o resultado sett