Tengo un conjunto de líneas que representan líneas de autobús. Algunas de las líneas se superponen y toman los mismos caminos.
Soy capaz de extraer los nodos.
Sin embargo, estoy interesado en extraer solo cruces como este:
¿Cómo puedo hacer esto? Estoy buscando formas con QGIS o Python.
Probé el método de intersección de GDAL Python, pero esto básicamente me devuelve solo los vértices.
El método de intersecciones de línea de QGIS me devuelve los cruces si se cruzan dos líneas. Sin embargo, en el caso de que dos líneas de autobús recorran gran parte de su ruta en el mismo camino, no me da que señalen dónde se fusionan.
Respuestas:
Los nodos:
Desea dos cosas, los puntos finales de las polilíneas (sin nodos intermedios) y los puntos de intersección. Hay un problema adicional, algunos puntos finales de polilíneas también son puntos de intersección:
Una solución es utilizar Python y los módulos Shapely y Fiona.
1) Lea el archivo de forma:
2) Encuentre los puntos finales de las líneas ( ¿cómo se obtendrían los puntos finales de una polilínea? ):
3) Calcule las intersecciones (iterando a través de pares de geometrías en la capa con el módulo itertools ). El resultado de algunas intersecciones son MultiPoints y queremos una lista de puntos:
4) Elimine los duplicados entre los puntos finales y los puntos de intersección (como puede ver en las figuras)
5) Guarde el archivo de forma resultante
Resultado final:
Los segmentos de línea
Si desea también los segmentos entre los nodos, debe "planarizar" ( Gráfico plano , sin bordes cruzados) su archivo de forma. Esto se puede hacer por el unary_union función del bien proporcionado
fuente
result = endpts.extend([pt for pt in inters if pt not in endpts])
ya que parece que el.extend
método se modificaendpt
. En mi casoresult = None
después de esa operación. Es loendpts
que termina conteniendo el conjunto de resultados