Batch-Clipping in ArcGIS Desktop mit ArcPy?


12

Bei älteren Versionen von ArcGIS sind einige ähnliche Fragen aufgetreten, für ArcGIS 10 wurde jedoch keine passende Antwort gefunden.

Ich habe zwei Polygon-Shapefiles, die einen großen Bereich abdecken (z. B. ein ganzes Bundesland / eine ganze Provinz). Das erste Shapefile repräsentiert die Landbedeckung für den gesamten Staat und das zweite Shapefile repräsentiert 50 einzelne Wassereinzugsgebiete. Ich möchte das Landbedeckungs-Shapefile basierend auf jeder Wasserscheide ausschneiden (jede hat einen eindeutigen Namen, der in einem Feld gespeichert ist). Ich möchte dann die Ausgabedateien (eine für jede der 50 Wassereinzugsgebiete) mit dem Namen des Wassereinzugsgebiets speichern.

Angesichts der Tatsache, dass 50 Clips ausgeführt werden müssen, ist dieser Prozess ein hervorragender Kandidat für die Stapelverarbeitung.


1
Was haben Sie für ältere Versionen von ArcGIS gefunden und was macht sie für die Verwendung mit ArcGIS 10 ungeeignet?
nmpeterson

2
@Radar Schauen Sie sich diese Frage an: gis.stackexchange.com/q/8104/1297 Sie deckt ab, wonach Sie suchen. Wenn Sie Hilfe bei der Anpassung an Ihre Bedürfnisse benötigen, lassen Sie es mich wissen. Ich habe dies als mögliches Duplikat markiert.
SaultDon

@SaultDon: Sagen Sie, dass die Lösung (en) unter gis.stackexchange.com/q/8104/1297 auf jeden Fall auch in ArcGIS 10 funktionieren?
whuber

@SaultDon - In ArcGIS 10 wurden einige Änderungen an Cursorn vorgenommen, die dazu führen, dass diese bestimmte Antwort veraltet ist. Ich hoffe, die beste Lösung für Arc10 zu finden und nicht nur eine gehackte Version eines 9.3-Skripts.
Radar

@whuber Nicht wie es ist, braucht Änderungen, die möglicherweise nicht offensichtlich sind. Radar - Sie haben Recht, sie sind einfacher =)
SaultDon

Antworten:


17

Das folgende Skript schneidet Polygon-Wasserscheiden an Polygon-County-Grenzen und benennt jede Ausgabe-Feature-Class wie HspWBD_HU12_county name. Getestet und es funktioniert. Stellen Sie sicher, dass Ihre Werte im Feld NAME keine Sonderzeichen oder Leerzeichen enthalten (einfache Python-String-Methoden können dies für Sie bereinigen).

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')), '')

Absolut perfekt, obwohl klassischer Cursor !!
Islam

8

Bei Verwendung von ArcGIS 10 verwende ich Modelbuilder mit dem integrierten Tool: Auswahl von Iterationsfeatures, um diese Aufgabe auszuführen. Siehe das Pseudomodell im Bild. Es muss überhaupt nicht mit Python Scritping vertraut sein. Pseudomodell


Eine ausführlichere Erläuterung dieses Ansatzes finden Sie unter Einfaches Ausschneiden eines gesamten Arbeitsbereichs für einen bestimmten Untersuchungsbereich sowie im zugehörigen Geoverarbeitungswerkzeugpaket für den Arbeitsbereich . Auch hier auf Stapel untersucht: gis.stackexchange.com/questions/84989/…
Matt Wilkie

2

Dies klingt genau so, wie es das Werkzeug Teilen aus der Analyse-Toolbox macht.

Für die Ausführung ist jedoch eine ArcInfo-Lizenz erforderlich, sodass diese für die meisten ArcGIS Desktop-Benutzer nicht verfügbar ist. Daher gefällt mir die Antwort von Chad, die auch für ArcGIS 10 Desktop-Benutzer mit ArcView- und ArcEditor-Lizenzen funktioniert.


-1

Sie können dies wie gewünscht ausführen, wenn Sie zuerst ein anderes Tool im Stapelmodus ausführen: Konvertierungstools> In Geodatabase> Feature-Class in Feature-Class. Auf diese Weise können Sie einen Ausdruck verwenden, um Ihre Wasserscheidenebene zu nehmen und jede Wasserscheide einzeln herauszuziehen und als eigene Feature-Class zu speichern. Anschließend stehen Ihnen 50 einzelne Ebenen zur Verfügung, die Sie mit dem Clip-Werkzeug im Stapelmodus verwenden können.


2
Ich schätze die Antwort, aber dies scheint keine sehr effiziente Lösung zu sein. Ich möchte lieber keine 50 separaten Wasserscheidendateien und dann 50 weitere abgeschnittene Dateien erstellen.
Radar

-1

Das Split - Tool in ArcGIS tut genau dies.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.