J'ai échoué à trouver le "nom" de l'algorithme qui permettrait de convertir des lignes en polygones. Depuis, ce problème traverse le SIG et les domaines de la géométrie numérique et de l'informatique. Je ne sais pas quoi ajouter au mix. Je suis réticent à fournir une liste de ce que j'ai recherché car j'aimerais également savoir quels autres personnes considéreraient leur premier choix de critères de recherche.
Le scénario ... J'ai des lignes (deux points nécessaires pour construire une ligne) ... chaque ligne est connectée à au moins une autre ligne. L'espace intermédiaire entre les lignes connectées formerait un polygone. Le scénario le plus simple serait un triangle ... un rectangle ... et l'on pourrait aller au-delà des entités multi-segmentées.
Désolé pour toute description vague, mais comme je l'ai dit, je ne veux pas guider les solutions possibles sur un chemin que j'ai déjà visité, car je suis autant intéressé par la "première pensée" que par la solution finale.
la source
Réponses:
Peut-être "remplissage de zone"? Voir ici et ici .
Éditer
Une autre possibilité est la triangulation contrainte . (Le lien est vers une applet Java qui vous permet de dessiner un graphique avec la souris, puis illustre un algorithme de balayage plan pour le trianguler.) Le résultat d'une telle triangulation, quelle que soit la façon dont elle est effectuée, peut facilement être traité pour créez les polygones souhaités: fusionnez simplement tous les triangles voisins qui partagent un bord nouvellement créé.
Exemple
Graphique d'origine:
Graphique triangulé:
la source
En théorie des graphes , cette opération est appelée calcul des faces . Elle est liée au calcul du dual d'un graphe donné.
Par exemple, dans la bibliothèque Java GeOxygène , un graphe (appelé CarteTopo ) a une méthode getFaces pour récupérer son visage .
C'est ce qu'on appelle la polygonisation dans JTS
la source
Le logiciel hôte RepRap convertit une liste de segments de ligne (dans un ordre aléatoire inconnu) en une liste de polygones, ce qui ressemble à ce que vous essayez de faire.
En particulier, l' algorithme RepRap "End Matching" gère un tas de cas pathologiques.
Hélas, le logiciel RepRap suppose que chaque coin a un nombre pair d'arêtes y allant - 2 lignes allant à un coin sur un objet normal; 4 lignes allant ensemble lorsque le coin d'un objet touche le coin d'un autre objet, etc. Je ne sais pas combien il serait difficile d'adapter cet algorithme pour gérer les diagrammes voronoi, qui ont généralement 3 bords allant à chaque coin.
la source
avez-vous exploré la base de code de GRASS pour trouver une solution à votre problème? -> http://old.nabble.com/Polyline-to-Polygon-operation-td20257839.html
la source
main.c
dans lav.type
source, tout ce qui se passe, c'est que les entités sont renommées en tant que limites: aucun traitement réel ne se produit. Rétrospectivement, cela n'est pas trop surprenant: si (je ne suis pas sûr) les entités sont conservées avec des informations topologiques 2D complètes, alors tous les calculs pour identifier les régions polygonales ont automatiquement eu lieu lors de la création ou de l'importation des entités et sont conservés tout au long toutes les opérations de géotraitement.Bonjour
Je ne pense pas que ce que vous recherchez soit un algorithme spécifique. La tâche peut être assez difficile ou très simple selon votre jeu de données.
Vous devez diviser le problème en au moins 2 parties. 1) est plus un problème de réseau, comment trouver des anneaux fermés de chaînes de lignes. 2) exprimer la chaîne fermée comme un polygone
La deuxième partie, qui consiste à "convertir des lignes en polygones", dépend davantage du format que de la représentation des polygones / chaînes de lignes. Je veux dire de:
LINESTRING (1 1, 2 2)
LINESTRING (2 2, 2 1)
LINESTRING (2 1, 1 1)
à:
POLYGON ((1 1,2 2,2 1,1 1))
convertit la ligne en polygone, mais ce n'est pas ce dont vous parlez, je suppose. La partie la plus difficile est la première. Si vous avez un spaghetti de lignes, comment les commander en tant que lignes fermées.
Je suppose que la réponse à cette question dépend en grande partie de l'ensemble de données. Comme Kirk le demande, si les lignes peuvent traverser, le problème est beaucoup plus important. Si vous savez que toutes les "collections de lignes" font partie d'une chaîne fermée, cela devient plus facile. Ensuite, vous pouvez saisir n'importe quelle ligne et marcher sur le chemin jusqu'à ce que vous soyez de retour, puis passer à l'étape deux ci-dessus.
Mon point est que la condition de l'ensemble de données définit toutes les règles sur la façon de le faire. Si vous voulez trouver tous les polygones possibles dans un spaghetti de chaînes de lignes, je suppose qu'il faudra beaucoup d'algorithmes différents pour mettre des points de sommet dans tous les croisements, rechercher tous les chemins possibles, etc.
Dans PostGIS, la fonction s'appelle ST_Polygonize. Cette fonction crée tous les polygones possibles à partir des chaînes de lignes que vous lui donnez.
Cela est effectué par GEOS afin que vous puissiez trouver les algorithmes derrière dans le code GEOS et JTS.
Juste quelques réflexions
/ Nicklas
la source
Vous pouvez essayer de rechercher l'algorithme "Forward Star". On m'a dit que c'est générique, mais les seules discussions à ce sujet que j'ai jamais lues étaient toujours en référence à arcgis. Peut-être regardez les références citées dans ces notes de cours pour l'étoile en avant.
la source