Esta es una pregunta simple y bastante común que ya se ha formulado para diferentes propósitos (vea este enlace y esto también , por ejemplo), aquí, sin embargo, no estamos buscando un paquete de software sino algoritmos que podríamos intentar implementar, digamos en Python .
Entonces, como se muestra a continuación, se asigna un conjunto de líneas (ya están recortadas, por cierto).
Algoritmos / ideas para generar polígonos (como se muestran los rojos) ?
algorithm
polygonize
geometry-conversion
Desarrollador
fuente
fuente
Respuestas:
Bueno, ponemos una respuesta aquí que no es una respuesta completa a nuestra pregunta, es decir, la pregunta permanecerá " abierta para responder ". Sin embargo, es una solución para el problema en la pregunta. Aquí está el truco que usamos:
Primero veamos los resultados :
Entonces, las líneas dadas en los
left
polígonos construidos que se muestran en elmiddle
. Son polígonos reales como se muestra enright
;)Para el algoritmo que se proporciona a continuación, utilizamos el
Shapely
paquete en Python .MultiLineString
{:: M}buffer
, digaeps
{:: MB}Polygon
{:: P} (región aquí es un cuadrado)P.difference(MB)
{polígonos resultantes}Tenga en cuenta que su funcionamiento es silencioso y rápido. Sin embargo, el punto que falta es que el algoritmo no es un método original para construir polígonos a partir de líneas . Sin embargo, funcionó perfectamente para el problema que teníamos en nuestras manos.
fuente
JTS Topology Suite tiene una clase Polygonizer, que prácticamente hace esto.
Puede echar un vistazo al código fuente, disponible aquí , y convertirlo a Python.
fuente
Puede echar un vistazo al paquete Python Shapely, particularmente polygonize ()
fuente
from shapely.ops import polygonize
) usa GEOS.Polygonize de GEOS . Entonces este es un enlace donde hay un enlace a un enlace ...: |polygonize
no tuvieron éxito en absoluto. Sin embargo, gracias por recordarnosShapely
con qué podríamos encontrar una solución (un truco, en realidad) publicado como respuesta.Aquí hay otra solución que podríamos encontrar.
Para Python hay un paquete {aquí} . Es una implementación pequeña con algunos errores. Sin embargo, con un poco de esfuerzo puede usarse para este problema. También tenga en cuenta las siguientes etapas:
Una etapa de preprocesamiento con la que se encuentran todas las intersecciones entre líneas. Luego, en consecuencia, todas las líneas se dividen en segmentos en los puntos de interacción. Una lista de puntos de intersección y una lista de bordes asociados son los necesarios para DCEL.
fuente
difference
se utiliza la operación.