Détourage par lots dans ArcGIS Desktop à l'aide d'ArcPy?

12

J'ai rencontré quelques questions similaires pour les anciennes versions d'ArcGIS, mais je n'ai pas trouvé de réponse appropriée pour ArcGIS 10.

J'ai deux fichiers de formes polygonales qui couvrent une grande zone (par exemple, un état / une province entière). Le premier fichier de formes représente la couverture terrestre de l'ensemble de l'État et le second représente 50 bassins versants individuels. Je voudrais découper le fichier de formes de l'occupation du sol en fonction de chaque bassin versant (chacun a un nom unique stocké dans un champ). Je voudrais ensuite enregistrer les fichiers coupés en sortie (un pour chacun des 50 bassins versants) en utilisant le nom du bassin versant.

Étant donné qu'il y a 50 clips à effectuer, ce processus est un excellent candidat pour le traitement par lots.

Radar
la source
1
Qu'avez-vous trouvé pour les anciennes versions d'ArcGIS et qu'est-ce qui les rend impropres à une utilisation avec ArcGIS 10?
nmpeterson
2
@Radar Jetez un œil à cette question: gis.stackexchange.com/q/8104/1297 Il couvre ce que vous recherchez. Si vous avez besoin d'aide pour modifier vos besoins, faites-le moi savoir. J'ai signalé cela comme un double possible.
SaultDon
@SaultDon: Êtes-vous en train de dire que la ou les solutions sur gis.stackexchange.com/q/8104/1297 fonctionneront certainement également dans ArcGIS 10?
whuber
@SaultDon - Certaines modifications ont été apportées aux curseurs dans ArcGIS 10 qui rendent cette réponse particulière obsolète. J'espère trouver la meilleure solution pour Arc10 et pas seulement une version piratée d'un script 9.3.
Radar
@whuber Pas tel qu'il est, a besoin de changements qui peuvent ne pas être évidents. Radar - Vous avez raison, ils sont plus simples =)
SaultDon

Réponses:

17

Le script suivant découpe les bassins versants de polygones aux limites des comtés de polygones, en nommant chaque caractéristique de sortie comme quelque chose comme le nom HspWBD_HU12_county. Testé et ça marche. Assurez-vous que vos valeurs dans le champ NAME n'ont pas de caractères ou d'espaces spéciaux (les méthodes de chaîne Python simples peuvent nettoyer cela pour vous).

import arcpy

arcpy.env.workspace = r'D:\Projects\GDBs\slowbutter.gdb\IPAS'
rows = arcpy.SearchCursor('HspAOI')
for row in rows:
    feat = row.Shape
    arcpy.Clip_analysis('HspWBD_HU12', feat, 'HspWBD_HU12_' + str(row.getValue('NAME')), '')
Chad Cooper
la source
Curseur de type absolument parfait mais classique !!
SIslam
8

Lorsque vous utilisez ArcGIS 10, j'utiliserais modelbuilder avec l'outil intégré: Sélection d'entités itératives pour effectuer cette tâche. Voir le pseudo-modèle dans l'image. il n'a pas du tout besoin de connaître le scritping python. pseudo modèle

VietThanh Le
la source
Pour une explication plus approfondie de cette approche, voir Couper facilement un espace de travail entier pour une zone d'étude spécifique et le package d'outils de géotraitement Clip Workspace associé . Également exploré ici sur la pile: gis.stackexchange.com/questions/84989/…
matt wilkie
2

Cela ressemble exactement à ce que fait l' outil Fractionner de la boîte à outils Analyse .

Cependant, il nécessite une licence ArcInfo pour fonctionner, il n'est donc pas disponible pour la majorité des utilisateurs d'ArcGIS Desktop, donc j'aime la réponse de Chad qui fonctionnera également pour les utilisateurs d'ArcGIS 10 Desktop avec des licences de niveau ArcView et ArcEditor.

PolyGeo
la source
-1

Vous pouvez le faire comme vous le souhaitez si vous exécutez d'abord un autre outil en mode batch: Outils de conversion> En géodatabase> Classe d'entités en classe d'entités. Cela vous permettra d'utiliser une expression pour prendre votre couche de bassin versant et extraire chaque bassin versant de manière individuelle et l'enregistrer comme sa propre classe d'entités, puis vous aurez 50 couches individuelles que vous pouvez utiliser avec l'outil Clip en mode batch.

Dan C
la source
2
J'apprécie la réponse, mais cela ne semble pas être une solution très efficace. Je préfère ne pas créer 50 fichiers de bassins versants distincts, puis 50 autres fichiers coupés.
Radar
-1

Le de Split outil dans ArcGIS fait exactement cela.

Mariana Oliveira
la source