11 votos

Generar polígonos a partir de un conjunto de líneas de intersección

Este es un simple y muy común la pregunta que ya ha sido pedido para diferentes fines (ver este enlace y este también, por ejemplo), aquí, sin embargo, que estamos buscando no es un paquete de software , pero los algoritmos que podríamos tratar de implementar decir en Python.

Así, como se muestra a continuación un conjunto de líneas se asignan (son ya recortado, por CIERTO).
Algoritmos/ideas para generar polígonos (como el rojo que se muestra)?

enter image description here

7voto

Developer Puntos 1191

Bien, vamos a poner aquí una respuesta que no es una respuesta completa a nuestra pregunta, que es, la pregunta será "abierto para responder". Sin embargo, es una solución para el problema en cuestión. Aquí está el truco que hemos utilizado:

Primero vamos a ver los resultados:
enter image description here

Así que las líneas dadas en la left construido polígonos se muestra en la middle. Son reales los polígonos, como se muestra en la right;)

Para el algoritmo dado a continuación se utilizó Shapely de paquetes en Python.

  • líneas ==> MultiLineString {:: M}
  • añadir una pequeña buffer, dicen eps {:: MB}
  • región ==> Polygon {:: P} (región aquí es un cuadrado)
  • P.difference(MB) {resultante polígonos}

Nota que es bastante rápida en la operación. Sin embargo, el punto que falta es que el algoritmo no es un método original para la construcción de polígonos a partir de líneas. Sin embargo, funcionó a la perfección para el problema que hemos tenido en nuestras manos.

5voto

Anthony Cramp Puntos 126

STC Topología Suite tiene una Polygonizer clase, lo que casi hace esto.

Usted puede mirar el código fuente, disponible aquí, y convertir en Python.

3voto

harmonic Puntos 16

Usted puede tomar un vistazo a la de Python bien formada paquete, particularmente polygonize()

2voto

Developer Puntos 1191

Aquí hay otra solución que podemos encontrar.

El uso de DCELnos puede hacer que los bloques de tocar las líneas.

Para Python no es un paquete {aquí}. Es una pequeña aplicación con algunos errores. Sin embargo, con un poco de esfuerzo se puede utilizar para este problema. También tenga en cuenta las siguientes etapas:

Un pre-procesamiento de la etapa con la que todas las intersecciones entre las líneas se encuentran. A continuación, en consecuencia, todas las líneas se dividen en segmentos en los puntos de interacción de los. Una lista de puntos de intersección y una lista de los bordes son aquellos necesarios para DCEL.

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