5 votos

¿Cómo encontrar todas las intersecciones y contar las líneas en cada intersección?

Estoy teniendo un tiempo difícil conseguir que fuera de la tierra con esto, y estoy tratando de alejarse de ArcGIS / arcpy.

Tengo un shapefile con una red de polilíneas. Quiero encontrar y contar a todos la 2-forma de las intersecciones de 3 vías, intersecciones, 4-way, etc. Esto implicaría, creo:

  • la división de todas las líneas en las intersecciones

  • la eliminación de segmentos idénticos (con algunos espacial de tolerancia)

  • crear puntos al final de cada nuevo segmento de línea

  • el búfer de la línea termina, y contar el número de puntos cerca de/en cada extremo de la línea

Me gustaría hacer esto en una secuencia de comandos de python. Es este plan general, fácilmente ejecutables en pyQGIS? Un esquema de las llamadas iba a usar sería muy útil.

4voto

cDecker32 Puntos 61

Hay un número de maneras de acercarse a este y varios listo para ir a los módulos de python a tu disposición. Sin embargo, yo directamente no se puede comentar en el Qgis llamadas pero estoy seguro de que la mayoría si no todos de estos procesos y documentos en la API: http://docs.qgis.org/1.8/html/en/docs/user_manual/index.html

Va en el orden de sus peticiones:

> la división de todas las líneas en las intersecciones

Usted puede probar primero a ver que las líneas se cruzan y, a continuación, encontrar los puntos de intersección entre dos líneas.

Hay un excelente ejemplo de cómo hacer esto en python en compiledreams.com:

Parte 1) Pruebas para la línea de intersección Parte 2) Encontrar el punto de intersección

Alternativamente, usted puede utilizar el módulo de python bien formada, que ofrece un sólido conjunto de relaciones geométricas métodos, incluida la intersección. Fiona también fue escrito para trabajar muy bien con bien formada y puede proporcionar un medio de la estructura de datos de traducción (suponiendo que usted va a utilizar un amistoso GDAL/ORG formato)

Qgis ofrece capacidades similares, pero dependiendo del tamaño del conjunto de datos podría ser bastante tiempo.

> eliminación de segmentos idénticos (con algunos espacial de tolerancia)

No estoy seguro de donde usted estaría consiguiendo segmentos idénticos, ya que son esencialmente de romper una línea característica en el punto y hacer que lo que fue uno de los dos separar las funciones de línea.

> crear puntos al final de cada nuevo segmento de línea

Así que si partimos de una línea de a = [(2,0),(2,1),(2,2),(2,3)] en el punto de intersección de la línea de b = [(0,2),(1,2),(2,2),(3,2)] obtendríamos a1 = [(2,0),(2,1),(2,2)] y a2 = [(2,2),(2,3)] de retorno. No hay duplicados de las geometrías y los puntos finales de las líneas sería el primer y último vértice en la matriz. Así que para a1 habría estaciones e1 = (2,0) y e2 = (2,2).

>búfer fin de la línea, y contar el número de puntos cerca de/en cada línea

Así que de nuevo bien formada ofrece un método muy fácil para hacer esto por cualquier número de unidades que usted elija (mismas unidades que los datos de entrada).

Alternativamente, se podría definir un radio alrededor de cada punto y crear una entidad poligonal que actúa como tampón. [Voy a renunciar a escribir el algoritmo aquí porque me cabe duda de que esto es lo que realmente quieres hacer].

A continuación, habría que probar para ver los puntos que caen dentro del búfer de polígono, manteniendo un simple recuento.

Similar a la prueba de si las líneas se cruzan ejemplo anterior, usted puede comprobar si un punto está dentro de un polígono utilizando un algoritmo como el que se definen aquí: http://www.ariel.com.au/a/python-point-int-poly.html

Sin embargo, puede simplemente encontrar todos los puntos de intersección dentro de una cierta distancia de cualquier intersección con algunos umbral de distancia. Esto también le ahorra la necesidad de crear búfer de polígonos y la realización de diversas pruebas.

Sin saber mucho acerca de su objetivo final, usted también puede tratar de la red de polilíneas igual que por medio de un tratamiento como un gráfico de la red. Esto podría simplificar el proceso mediante Networkx, que también permite la lectura en los shapefiles. Aunque las relaciones topológicas entre las características de línea debe ser exacta ya (lo que significa tener ya rompió las líneas en los puntos de intersección). El recuento de las intersecciones es entonces sólo una cuestión de cálculo de la red de estadística de "grado", que a su vez es una simple llamada de método en Networkx.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X