Suite

Diviser un polygone en tailles spécifiques à l'aide d'ArcGIS Desktop ?

Diviser un polygone en tailles spécifiques à l'aide d'ArcGIS Desktop ?


J'ai plusieurs milliers de polygones de forme irrégulière dans un fichier de formes. Je veux pouvoir diviser chaque polygone en trois zones et spécifier la taille de ces zones (elles totalisent la zone totale précédente). La forme du sous-polygone n'a pas d'importance, car c'est à des fins de visualisation.

Comment puis-je procéder? Existe-t-il un algorithme standard que je peux utiliser ?


Une approche que j'ai envisagée était d'obtenir tous les points qui composent le polygone. Ensuite, je joindrais deux au hasard à l'aide d'une ligne droite, diviserais le polygone, puis vérifierais si la zone se situait dans une tolérance satisfaisante. S'il était trop petit, je changerais le point dans un sens ; s'il était trop grand, je changerais en un point dans la direction opposée.


Ce problème a de nombreuses solutions valables. L'un d'eux fonctionne un peu comme votre description, mais au lieu de découper les polygones à des emplacements "aléatoires", vous pouvez le faire à dessein de manière à minimiser la quantité de calcul.

Voici l'algorithme de base. Son entrée se compose de n'importe quelle direction de balayage plan, un polygone P de zone non nulle, une zone cible une entre zéro et l'aire du polygone, et un seuil non négatif t (en unités de surface). Son but est de diviser P avec une ligne perpendiculaire à la direction de balayage en deux parties, l'une à droite de la ligne et l'autre à gauche de la ligne, de telle sorte que la différence entre la zone de droite et la zone cible une n'est pas supérieur à t.

Laisser L être n'importe quelle ligne orientée perpendiculairement à la direction du balayage. Définissez f(L) comme l'aire de P trouvée à droite de L, moins une. En ces termes, la tâche consiste à trouver un zéro de F. Parce que F est peu susceptible d'être différentiable, mais est continue, utilisez soit une méthode de bissection, la méthode de la sécante, ou - mon préféré - la méthode de Brent. Tous sont simples et convergents garantis. Utilisation t pour la tolérance de convergence de l'argument.

C'est ça. Considérons ce qui se passe dans le codage de cela. La recherche de la racine est routinière - vous pouvez utiliser un morceau de code générique pour cela - donc le travail du SIG se résume au codage F. Cela nécessite

1. Fractionnement du polygone par une ligne. 2. Calculer l'aire du ou des morceaux à droite de la ligne.

Les deux opérations sont implémentées dans presque tous les SIG vectoriels. Sinon, vous pouvez remplacer la ligne par un très grand rectangle représentant le demi-plan à droite de la ligne. L'étape 1 devient

1'. Découpez le polygone au rectangle.

C'est un vraiment opération de base.

Pour commencer avec la recherche de racine, vous devez trouver un intervalle dans lequel le zéro de F est garanti de mentir. C'est simple : projetez l'enveloppe du polygone (« boîte englobante ») dans la direction du balayage de la ligne. La projection est l'intervalle que vous voulez.

Cette question a une longue histoire. J'ai implémenté cet algorithme pour ArcView 3.x il y a longtemps et je l'ai décrit à plusieurs reprises dans les anciens forums d'utilisateurs d'ESRI. Google

site de polygone divisé huber:forums.esri.com

pour les discussions, les liens vers le code, les améliorations et les variations (telles que la division des polygones en parties de tailles souhaitées aussi compactes que possible) et les algorithmes pour les données raster.

Voici à quoi ressemblent les États continentaux des États-Unis (dans une projection de surface égale) avec le tiers inférieur de chaque État ombré. De toute évidence, la direction du balayage était verticale.


Il existe un outil prêt à l'emploi appelé "GeoTools" d'ET Spatial. Où il y a un outil appelé "ET Divers". Dans cet outil, il existe deux types de méthodes pour diviser les polygones, à savoir. Par pourcentage et par zone ( plusieurs unités, par exemple m², hectares, etc.). Cet outil divise les polygones de l'un des quatre côtés, c'est-à-dire NESW, comme le montrent les images. J'ai utilisé "de haut en bas", c'est-à-dire la méthode du nord au sud.


Il existe un nouvel outil dans ArcGIS Pro 2.3 appelé Subdivide Polygon.

Il permet de diviser/subdiviser un polygone en fonction du nombre de parties ou de la zone de partie souhaitée.


Voir la vidéo: ArcPy - Split Polygon into Equal Parts ArcGIS