J'ai beaucoup de polygones. Idéalement, tous les polygones ne doivent pas se chevaucher une autre, mais ils peuvent être situés à côté les uns aux autres. P>
mais pratiquement, je devrais permettre légère em> chevauchement de polygone (défini par une certaine tolérance), car tous ces polygones sont obtenus à partir d'une entrée de dessin de la main de l'utilisateur, qui n'est pas aussi prête à la machine que je veux qu'ils soient. p>
Ma question est, existe-t-il des composants de la bibliothèque logicielle qui: p>
ou y a-t-il quelqu'un qui a abordé ce problème avant? P>
3 Réponses :
Ce numéro est un "pain" quotidien des applications SIG - c'est ce qui est fait exactement là-bas. Nous avons également appris qu'à un cours SIG. Regardez dans SIG Systems comment ils traitent de ce problème. Par exemple. Les arcgis définissent des règles telles que les règles de topologie forts> et ont certaines fonctions pour vérifier si les fonctionnalités éditées sont
Oui, vous pouvez utiliser ogr . Il a des fixations de python. Plus précisément, la classe de géométrie a une méthode des intersecteurs. Je ne comprends pas complètement ce que vous voulez dans les points 4 et 5. P>
Je ne pense vraiment pas que l'OGO est pertinente, je recherche un algorithme général, pas des applications pour lire / écrire des fichiers avec un format SIG.
Euh, je vois que vous recherchez une bibliothèque, ce qui est exactement ce qu'Orogne est. Il peut faire de la manipulation complète de vecteurs et que de nombreux packages SIG sont basés sur. Donc, oui, entièrement pertinent (sauf si vous voulez le faire manuellement).
La méthode / la fonction d'intersection s'adressera à la nécessité qui se chevauchent, mais uniquement en 2D et uniquement si GEOS est installé. Typiquement, cela signifie bâtir de la source. Basmely est probablement une meilleure option gispython.org/shapely/docs/1.0/manual.html < / a>
C'est assez long, seulement parce que la question est si grosse. J'ai essayé de regrouper mes commentaires basés sur vos points de balle. P>
composants pour dessiner des polygones forts> p>
Je suppose que vous aurez un succès limité sans fournir plus d'informations - un composant à dessiner des polygones sera très couplé à la langue et au paradigme UI que vous utilisez pour le reste de votre projet, c'est-à-dire. Le code d'un composant Web sera très différent d'un composant natif. P>
Peut-être une alternative consiste à séparer cet élément du processus du reste de ce que vous essayez de faire. Il existe des éditeurs préexistants absolument fantastiques que vous pouvez utiliser pour créer des polygones 2D et 3D. p>
Inkscape est un exemple d'éditeur graphique vectoriel qui facilite la saisie de polygones 2D et a l'avantage de production de sortie SVG, ce qui est raisonnablement facile à analyser. p>
en trois dimensions Blender est un éditeur open source qui peut être utilisé pour produire des géométries arbitraires pouvant être utilisées exporté vers un certain nombre de formats. p>
Si vous pouvez utiliser une API Google-Maps (éventuellement dans un contrôle de rendu HTML native) et que vous souhaitez ajouter des points spatiaux sur une superposition de carte, vous pouvez être intéressé par une connexion associée . Depuis l'expérience passée, d'autres API de carte comme OpenLayers Soutenir des approches similaires. P>
Vérifiez si les polygones sont superposés forts> p>
thomas t a fait le point dans son Réponse , qu'il y a des familles des prédicats connexes pouvant être utilisés pour traiter cette question et des requêtes connexes. Si vous recherchez littéralement simplement des chevauchements et d'autres opérations théoriques définies (union, intersection, différence de jeu) dans deux dimensions, vous pouvez utiliser le Clipper polygone général p>
Vous devrez peut-être également envisager le problème légèrement plus générique lorsque deux polygones qui ne chevauchent pas et ne partagent pas de sommet lorsqu'ils devraient. Vous pouvez utiliser une somme de Minkowski pour dilater (Agrandir) des polygones de deux et trois dimensions pour éviter de tels problèmes. La bibliothèque d'algorithmes de géométrie informatique a des implémentations robustes de ces algorithmes. p>
Je pense qu'il est plus probable que vous recherchiez vraiment un logiciel qui peut effectuer une soudure de vertex, le livre de Christer Ericicon Détection de collision en temps réel comprend une description étendue et très lisible des bases de ce domaine, ainsi que sur des problèmes connexes de claquage de bord, de détection de crack, de jonctions t et d'autres. Cependant, même si les extraits de code sont inclus pour ce livre, je ne connais aucune bibliothèque prête qui répond à ces problèmes, en particulier, aucune mise en œuvre complète n'est donnée pour quoi que ce soit au-delà du soudage de sommet de base. P>
Évidemment tous les packages 3D (Blender, Maya, Max, Rhino) Tous incluent tous les logiciels et outils intégrés pour résoudre ce problème. P>
Depuis l'expérience passée, cela s'est avéré être l'une des parties les plus consommées de développement de logiciels pour résoudre des problèmes dans ce domaine. Cela nécessite une compréhension raisonnable de la théorie des graphes et des algorithmes pour traverser les frontières. Il convient de s'appuyer sur une bibliothèque de géométrie solide ou de graphique pour faire de la forte levée pour vous. Dans le passé, j'ai eu le succès avec iGraph . P>
liez les polygones mis à jour à l'origine des originaux. strong> p>
Encore une fois, de l'expérience passée, il s'agit d'un cas de comptabilité prudente et d'une conception très prudente de vos cours de maillage au-dessus. J'aimerais donner plus de conseils, mais même après avoir passé un gros morceau des six derniers mois à ce sujet, j'ai toujours du mal à trouver une "belle" façon de le faire. P>
Autres commentaires forts> p>
Si vous interagissez avec les utilisateurs, je vous recommande vivement d'éviter ce problème dans la mesure du possible à l'aide d'un éditeur «Snaps», arrondissant tous les points entrés par l'utilisateur sur une grille. J'espère que cela réduira considérablement la quantité de travail que vous devez faire. P>
Les polygones sont-ils en deux ou trois dimensions?