Suite

Convertir des polygones en une seule partie adjacents en plusieurs parties ?


Je suis intéressé par la conversion d'une classe d'entités surfaciques créée via Create Fishnet (Data Management) de singleparts à multipart. QGIS a un outil très pratique appelé singleparts to multipart qui fait le travail, cependant, je dois rester dans le domaine arcpy/Python. L'équivalent ArcGIS semble être Dissoudre, mais l'outil ne préserve pas la géométrie des entités individuelles lorsque les polygones partagent une bordure.

Ce qui suit est un exemple du type de données de polygone de résille avec lesquelles je travaille, qui a été généré à partir du script ci-dessous.

import arcpy # Crée un quadrillage avec 9 colonnes et 9 lignes # avec l'origine à (1, 1) et la géométrie de sortie est définie par défaut (POLYGON) arcpy.CreateFishnet_management("C:/temp/fishnet2.shp", "1 1" , "1 9", "1", "1", "9", "9", "#", "NO_LABELS", geometry_type = "POLYGON")

Comment puis-je convertir un polygone de résille de parties individuelles en plusieurs parties à l'aide d'une approche de script ?


*Noter. Il y a une question similaire à GIS SE (Créer un seul polygone connecté à partir de plusieurs polygones), bien qu'elle semble être limitée aux outils de bureau. Je recherche des approches basées sur Python ou arcpy.


Je ne sais pas si ce qui suit ne fera pas la même chose que dissoudre, mais si j'ai raison, cela ne devrait pas.

Vous pouvez utiliser unRechercheCurseur()pour parcourir les polygones, obtenir la géométrie de chaque polygone, les ajouter en tant que parties sur un nouvel objet de géométrie de polygone et utiliser unInsérerCurseur()pour insérer ce nouvel enregistrement.

sc = arcpy.SearchCursor("c:/temp/fishnet2.shp") ic = arcpy.InsertCursor("yournewfeatureclass.shp") newRow = ic.newRow() array = arcpy.Array() pour la ligne dans sc: geom = row.getValue("shape").getPart(0) array.add(geom) polygon = arcpy.Polygon(array) newRow.setValue("shape", polygon) ic.insertRow(newRow) del sc, ic

Remarque : cela insère tous les polygones de votre classe d'entités initiale en tant que polygone en plusieurs parties dans la classe d'entités en sortie. Vous pouvez utiliserMakeFeatureLayer_management()etSelectLayerByAttribute_management()pour sélectionner les bons polygones à additionner.


D'accord, donc je n'ai pas testé ce qui précède et cela n'a malheureusement pas fonctionné (quelqu'un sait comment barrer du texte ?). Ci-dessous le résultat de mon test. Curieusement, l'effet n'était pas le même pour une classe d'entités FGDB et un fichier de formes. Les polygones du curseur de recherche sont triés par Objectid, le polygone en bas à gauche étant le premier, se déplaçant d'abord vers le haut le long des colonnes, puis le long des lignes.


Je pense que vous devrez conserver les polygones en tant qu'entités distinctes. Les multiparties de polygone sont une construction maléfique qui n'a pas de topologie logique pour l'analyse et même l'affichage dans votre cas.

Quel est le problème avec une classe d'entités distincte ? Si vous souhaitez agréger les propriétés, un Dissolve le fera. Vous pouvez associer les multiples entités au seul contour dissous si vous souhaitez un seul enregistrement d'attribut. Vous pouvez également convertir les polygones en polylignes pour supprimer les anneaux coïncidents en double. Il existe des moyens de créer des règles de topologie pour relier les lignes de délimitation et le polygone.

Vous avez besoin d'une topologie valide et sans ambiguïté dans n'importe quel système pour pouvoir effectuer plus d'analyses. Considérez des idées simples telles qu'un centre de gravité de polygone. Il peut se trouver en dehors de tous les polygones, de sorte qu'une superposition de polygones de point d'entrée ne parviendra pas à sélectionner l'ensemble.

Les couvertures gèrent ce cas facilement car les polygones ont été définis à l'aide d'un PAL (Polygon-Arc-List) qui définissait un polygone comme la chaîne de lignes. Aucun chevauchement possible (sauf si vous êtes passé à une classe d'entités Region plus complexe). La topologie de couverture me manque, cela a rendu ce type d'analyse une évidence.