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

26

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 quelle est la taille de ces zones (elles totalisent la zone totale précédente). Peu importe la forme du sous-polygone, car c'est à des fins de visualisation.

Comment puis-je m'y prendre? 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 joignais deux au hasard en utilisant une ligne droite, divisais le polygone, puis vérifiais si la zone était dans une tolérance satisfaisante. S'il était trop petit, je changerais le point dans une direction; s'il était trop grand, je changerais pour un point dans la direction opposée.

djq
la source

Réponses:

34

Ce problème a de nombreuses solutions valides. 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 de manière délibérée 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, d'un polygone P de zone non nulle, d'une zone cible a entre zéro et la zone du polygone, et d'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, une à droite de la ligne et l'autre à gauche de la ligne, de sorte que la différence entre la zone de droite et la zone cible a n'est pas supérieur à t .

Soit L toute ligne orientée perpendiculaire à la direction de balayage. Définissez f (L) comme l'aire de P trouvée à droite de L, moins a . En ces termes, la tâche consiste à trouver un zéro de f . Parce que f est peu susceptible d'être différentiables, mais continue, utilisez une méthode bissectrice, la méthode sécante , ou - ma favorite- méthode de -Brent . Tous sont simples et garantis de converger. Utilisez t pour la tolérance de convergence de l'argument.

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

1.  Splitting the polygon by a line.
2.  Computing the area of the piece(s) to the right of the line.

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'. Clip the polygon to the rectangle.

C'est une opération vraiment basique.

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

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 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 à surface égale) avec le tiers inférieur de chaque État ombré. De toute évidence, la direction de balayage était verticale.

texte alternatif

whuber
la source
6

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éthode pour diviser les polygones: Par pourcentage et par zone (plusieurs unités, par exemple m², hectares, etc.). Cet outil sépare les polygones de n'importe lequel 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.

Divisé

SIslam
la source
0

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 pièces ou de la zone de pièce souhaitée.

0kcats
la source