C'est une question simple et assez courante qui a déjà été posée à des fins différentes (voir ce lien et cela aussi , par exemple), ici, cependant, nous ne recherchons pas un progiciel mais des algorithmes que nous pourrions essayer d'implémenter disons dans Python .
Ainsi, comme illustré ci-dessous, un ensemble de lignes est mappé (elles sont déjà coupées, BTW).
Algorithmes / idées pour générer des polygones (comme les rouges le montrent) ?
algorithm
polygonize
geometry-conversion
Développeur
la source
la source
Réponses:
Eh bien, nous mettons ici une réponse qui n'est pas une réponse complète à notre question, c'est-à-dire que la question restera " ouverte à la réponse ". C'est cependant une solution au problème de la question. Voici l'astuce que nous avons utilisée:
Voyons d'abord les résultats :
Ainsi, les lignes données dans les
left
polygones construits indiqués dans lemiddle
. Ce sont de vrais polygones comme le montre leright
;)Pour l'algorithme donné ci-dessous, nous avons utilisé le
Shapely
package en Python .MultiLineString
{:: M}buffer
, diteseps
{:: MB}Polygon
{:: P} (région ici est un carré)P.difference(MB)
{polygones résultants}Notez qu'il est silencieux et rapide en fonctionnement. Cependant, le point manquant est que l'algorithme n'est pas une méthode originale pour construire un polygone à partir de lignes . Néanmoins, cela a parfaitement fonctionné pour le problème que nous avions dans la main.
la source
JTS Topology Suite a une classe Polygonizer, qui fait à peu près cela.
Vous pouvez consulter le code source, disponible ici , et le convertir en Python.
la source
Vous pourriez jeter un œil au package Python Shapely, en particulier polygonize ()
la source
from shapely.ops import polygonize
) utilise GEOS.Polygonize de GEOS . C'est donc un lien où il y a un lien vers un lien ...: |polygonize
n'ont pas réussi du tout. Cependant merci de nous avoir rappeléShapely
avec qui nous pourrions trouver une solution (une astuce, en fait) telle que publiée comme réponse.Voici une autre solution que nous pourrions trouver.
Pour Python, il y a un package {ici} . C'est une minuscule implémentation avec quelques bugs. Néanmoins, avec un certain effort, il peut être utilisé pour ce problème. Notez également les étapes suivantes:
Une étape de prétraitement avec laquelle toutes les intersections entre les lignes sont trouvées. En conséquence, toutes les lignes sont divisées en segments aux points d'interaction. Une liste de points d'intersection et une liste d'arêtes associées sont celles nécessaires pour DCEL.
la source
difference
opération est utilisée.