Suite

Fusionner les entités sélectionnées dans une table DBF (polygones) à l'aide d'ArcPy ?


Je suis absolument nouveau sur Python et la programmation. Comment fusionner les entités sélectionnées dans une table DBF (polygones) à l'aide de Python dans ArcGIS 10.2 for Desktop ?

Voici ce dont j'ai besoin :

Voici ce que j'ai :

arcpy.Dissolve_management(S2_merge1, S2_dissolve5, "Nom5", "", MULTI_PART", "DISSOLVE_LINES")

arcpy.JoinField_management(S2_dissolve5, "Nom5", S2_merge1, "Nom5", "Nom1")

Cela fonctionne mais je dois le faire sans commande de dissolution - Vous voyez que je dois fusionner les fonctionnalités sélectionnées dans un shp/dbf comme je le fais dans la session Editor. Je ne trouve pas ce type de boîte à outils/commande dans ArcGIS

Et y a-t-il une possibilité de configurer l'outil Dissoudre pour obtenir shp-theme avec tous les champs ce qui était dans le shapefile d'origine comme c'était dans ArcView 3.2 ?


Puisque vous êtes nouveau sur python et arcpy, je dirai que ce problème est plus compliqué que les étapes que vous faites habituellement dans ArcMap. Cependant, si vous avez une grande table ou un grand nombre de fichiers de formes, arcpy vous fera gagner beaucoup de temps.

La bonne façon (IMO) de le faire est avec le.syndicatfonction pour les objets géométriques etarcpy.da.InsertCursorpour les attributs. Sans une description exacte, il est difficile de coder exactement ce dont vous avez besoin, mais je vais essayer.

Quelques liens utiles :

Alternative à la fonctionnalité « Editors Merge » à l'aide d'Arcpy

http://pro.arcgis.com/en/pro-app/tool-reference/data-management/create-feature-class.htm

Possible d'ajouter plusieurs champs dans une seule déclaration arcpy ?

# Tout d'abord, créez une classe d'entités en sortie avec le schéma souhaité arcpy.CreateFeatureClass_management(r'C:PathToOutput', 'output.shp', 'POLYGON', spatial_reference="S2_merge1") champs = [ ('NAME5 ', 'TEXT'), ('NAME1', 'TEXT'), #… Ajoutez des champs si nécessaire] pour le champ dans les champs : arcpy.AddField_management(*(r'C:PathToOutputoutput.shp' ,) + champ) # Maintenant que nous avons le jeu de données de sortie, nous allons le remplir en 2 étapes # Étape 1 : Fusionner toutes les géométries pour les formes qui ont la même valeur Name5 # Étape 2 : Pour chaque ensemble de géométries fusionnées, remplissez le Name1 # attribut avec les lettres uniques de tous les attributs Name1 pour cet ensemble. # Dans votre exemple, As3 aurait 'ABC' # Obtenez des valeurs uniques pour la colonne que vous souhaitez 'dissoudre' sur unique_names = trié({r[0] for r in arcpy.da.SearchCursor('S2_merge1', 'Name5' )}) # Cela vous donnera une liste comme ['As1', 'As2', 'As3'] # Ensuite, vous devez fusionner les géométries qui partagent le même Name5 avec arcpy.da.InsertCursor(r'C:Path ToOutputoutput.shp', ['[email protected]', 'Name1', 'Name5']) comme icur : pour name5 dans unique_names : query = "Name5 = '{}'".format(name5) # Pour exemple Name5 = 'As1' geoms_to_merge = [r[0] pour r dans arcpy.da.SearchCursor('S2_merge1', '[email protected]', query) ] merged_names = trié({r[0] pour r dans arcpy.da. SearchCursor('S2_merge1', 'Name1', query) }) parent_geom = geoms_to_merge[0] if len(geoms_to_merge) > 1: child_geoms = geoms_to_merge[1:] for geom in child_geoms: # Union chaque géométrie enfant avec le parent parent_geom = parent_geom.union(geom) name1 =".join([i for i in merged_names]) insert_row = (parent_geom, name1, name5) icur.insertRow(insert_row) # Cela devrait donner vous une table de sortie qui a des lignes égales au nombre de valeurs uniques dans la colonne Name5.

J'ai eu un problème similaire et j'ai pu le résoudre en utilisant la réponse précédente, cependant, il y a quelques petites choses que j'ai dû corriger à partir du code fourni par KJYDavis.

Le premier n'est qu'une faute de frappe :

unqiue_names au lieu de unique_names

### Obtenez des valeurs uniques pour la colonne que vous souhaitez "dissoudre" sur unique_names = trié({r[0] pour r dans arcpy.da.SearchCursor('S2_merge1', 'Name5')})

La seconde se trouve dans la requête :

query = "Name5 = {}".format(name5) # n'a pas fonctionné pour moi query = " 'Name5' = '{}' ".format(name5) # a fonctionné

Le troisième est dans la dernière ligne :

icur.insertRow(row) # n'a pas fonctionné icur.insertRow(insert_row) # a fonctionné


Voir la vidéo: Tuto ArcGIS: Fusionner. Dissolve (Octobre 2021).