ArcPy ist ein Site-Paket, das auf das erfolgreiche Modul "arcgisscripting" aufbaut (und dessen Nachfolger darstellt). Es soll die Hauptkomponente für eine nützliche und produktive Durchführung von geographischen Datenanalysen, Datenkonvertierung, Datenmanagement und Kartenautomatisierung mit Python sein.
ArcPy bietet Zugriff auf Geoverarbeitungswerkzeuge sowie zusätzliche Funktionen, Klassen und Module, mit denen Sie schnell und unkompliziert einfache oder komplexe Workflows erstellen können.
ArcGIS-Anwendungen und -Skripte, die mit ArcPy geschrieben wurden, können die vielen verschiedenen Python-Module nutzen, die von GIS-Fachleuten und Programmierern der unterschiedlichsten Fachrichtungen entwickelt wurden. Ein zusätzlicher Vorteil der Verwendung von ArcPy in Python besteht darin, dass Python eine allgemeingültige Programmiersprache ist, die einfach erlernt und verwendet werden kann. ArcPy wird interpretiert und dynamisch typisiert. Sie können in einer interaktiven Umgebung also schnell Prototypen von Skripten erstellen und diese testen, und verfügen trotzdem über die Leistungsstärke, um das Schreiben von großen Anwendungen unterstützen zu können.
ArcPy bietet Zugriff auf Geoverarbeitungswerkzeuge sowie zusätzliche Funktionen, Klassen und Module, mit denen Sie einfache oder komplexe Workflows erstellen können. ArcPy lässt sich grob in Werkzeuge, Funktionen, Klassen und Module unterteilen.
Technisch gesehen sind Geoverarbeitungswerkzeuge Funktionen, die von arcpy zur Verfügung gestellt werden – d. h. der Zugriff darauf erfolgt wie auf jede andere Python-Funktion. Um Verwechslungen zu vermeiden, wird jedoch stets zwischen Werkzeug- und Nicht-Werkzeug-Funktionen unterschieden (zu letzteren gehören beispielsweise Hilfsprogrammfunktionen wie ListFeatureClasses()).
- Werkzeuge sind anders dokumentiert als Funktionen. Für jedes Werkzeug steht im ArcGIS Desktop-Hilfesystem eine eigene Werkzeugreferenzseite zur Verfügung. Funktionen sind in der ArcPy-Dokumentation dokumentiert.
- Werkzeuge geben ein Result-Objekt zurück, Funktionen hingegen nicht.
- Werkzeuge erzeugen Meldungen, auf die mit einer Vielzahl verschiedener Funktionen, wie z. B. GetMessages(), zugegriffen werden kann. Funktionen erzeugen keine Meldungen.
- Werkzeuge werden nach Produktebene (ArcGIS Desktop Basic, Desktop Standard oder Desktop Advanced) und nach Erweiterung (Erweiterung "ArcGIS Network Analyst", Erweiterung "ArcGIS Spatial Analyst" usw.) lizenziert. Die erforderlichen Lizenzstufen sind auf der Referenzseite des jeweiligen Werkzeugs angegeben. Funktionen sind nicht lizenziert, sondern werden mit ArcPy installiert.
Ausführen eines Werkzeugs
Das nächste Beispiel verdeutlicht, wie Sie das Werkzeug Puffer ausführen. Wenn das Werkzeug ausgeführt wird, werden die Meldungen standardmäßig rechts im Python-Fenster im Abschnitt für die Hilfe angezeigt.
>>> arcpy.Buffer_analysis("c:/data/Portland.gdb/streets", "c:/data/Portland.gdb/steets_buffer", "500 METERS")
Es folgt ein weiteres Beispiel für die Ausführung von Werkzeugen. In diesem Beispiel werden Werkzeuge aus den Toolboxes "Data Management" und "Conversion" verwendet. Der als Eingabe dienenden Streets-Feature-Class wird ein Feld hinzugefügt, das Feld berechnet, und die Feature-Class in eine Enterprise-Geodatabase geladen.
>>> import arcpy
>>> arcpy.AddField_management("c:/data/Portland.gdb/streets", "LENGTH_MILES", "TEXT")
>>> arcpy.CalculateField_management("c:/data/Portland.gdb/streets", "LENGTH_MILES", "!shape.length@miles!", "PYTHON_9.3")
>>> arcpy.FeatureClassToFeatureClass_conversion("c:/data/Portland.gdb/streets", "Database Connections/MySDE.sde/PortlandDataset", "streets")
Abrufen von Ergebnissen von einem Werkzeug
Bei der Ausführung eines Geoverarbeitungswerkzeugs werden die Ergebnisse des Werkzeugs in einem Result-Objekt zurückgegeben. In der Regel handelt es sich bei diesem Objekt um den Pfad zum Ausgabe-Dataset, das vom Werkzeug erstellt oder aktualisiert wurde. Es können jedoch auch andere Werttypen, z. B. Zahlen oder boolesche Werte, zurückgegeben werden. Falls die Ausgabe für ein Werkzeug ein mehrwertiger Parameter ist, können die Werte als Liste in einer Liste zurückgegeben werden.
In den folgenden Codebeispielen werden die Erfassung von Rückgabewerten und die möglichen Werte veranschaulicht:
Zurückgeben des Pfades der Ausgabe-Feature-Class. Das Ergebnis kann als Eingabe für eine andere Funktion verwendet werden.
>>> result = arcpy.Buffer_analysis("rivers", "riverBuf", "50 METERS")
>>> print result
C:\Portland\Portland_OR.gdb\riverBuf
>>> arcpy.Clip_analysis("streets", result, "streets_50m_of_rivers")
Zurückgeben der Anzahl der Features
>>> result = arcpy.GetCount_management("streets_50m_of_rivers")
>>> print result.getOutput(0)
54
Zurückgeben einer Liste von standardmäßigen räumlichen Indexgittern für eine Feature-Class
>>> result = arcpy.CalculateDefaultGridIndex_management("streets_50m_of_rivers")
>>> for i in range(0, result.outputCount):
... print result.getOutput(i)
...
560
200
0
Verwenden von Umgebungseinstellungen
Umgebungseinstellungen für die Geoverarbeitung können als zusätzliche Parameter aufgefasst werden, mit denen die Ergebnisse eines Werkzeugs beeinflusst werden können. Sie unterscheiden sich insofern von normalen Werkzeugparametern, als sie getrennt vom Werkzeug verwaltet und von Werkzeugen während der Ausführung abgefragt und verwendet werden. Umgebungseinstellungen, wie z. B. ein Interessenbereich, das Koordinatensystem des Ausgabe-Datasets oder die Zellengröße eines neuen Raster-Datasets, können über die Werkzeuge angegeben und von ihnen berücksichtigt werden.
Umgebungseinstellungen stehen als Eigenschaften in der env-Klasse zur Verfügung. Über diese Eigenschaften können die aktuellen Umgebungswerte abgerufen und festgelegt werden. Im Folgenden finden Sie einige Beispiele für die Verwendung von Werten der Umgebungseinstellungen:
Festlegen der Workspace-Umgebung
>>> arcpy.env.workspace = "c:/data/Portland.gdb"
>>> arcpy.Buffer_analysis("streets", "streetBuf", "500 METERS")
Festlegen des räumlichen Indexgitters auf den Rückgabewert eines Werkzeugs
>>> arcpy.env.spatialGrid1 = arcpy.CalculateDefaultSpatialGridIndex_management("streets").getOutput(0)
Abrufen der aktuellen Zellengrößeneinstellung des Rasters und Sicherstellen, dass es sich um eine bestimmte Größe für die Standardausgabe handelt.
if arcpy.env.cellSize != 30:
arcpy.env.cellSize = 30
Verwenden von Funktionen
Eine Funktion ist eine definierte Funktionseinheit, die einen bestimmten Task ausführt und in ein größeres Programm integriert werden kann. Zusätzlich zu Werkzeugen stellt ArcPy eine Reihe von Funktionen bereit, um Geoverarbeitungs-Workflows besser zu unterstützen. Funktionen können verwendet werden, um spezifische Datasets aufzulisten, die Eigenschaften eines Datasets abzurufen, das Vorhandensein von Daten zu überprüfen oder einen Tabellennamen vor dem Hinzufügen zu einer Geodatabase zu überprüfen. Sie ermöglichen außerdem die Ausführung einer Vielzahl weiterer hilfreicher Skripterstellungs-Tasks.
Der folgende Beispielcode veranschaulicht, wie die Eigenschaften von Daten abgerufen werden und eine Erweiterung ausgecheckt wird.
import arcpy
# prints True
print arcpy.Exists("c:/data/Portland.gdb/streets")
# prints NAD_1983_StatePlane_Oregon_North_FIPS_3601_Feet
sr = arcpy.Describe("c:/data/Portland.gdb/streets").spatialReference
print sr.name
# prints Available
print arcpy.CheckExtension("spatial")
arcpy.CheckOutExtension("spatial")
Verwenden von Klassen
ArcPy-Klassen, z. B. SpatialReference und Extent, werden häufig als Verknüpfungen zu vollständigen Parametern von Geoverarbeitungswerkzeugen verwendet, die andernfalls über eine kompliziertere Zeichenfolgenentsprechung verfügen würden. Eine Klasse entspricht einem architektonischen Entwurf. Der Entwurf stellt die Grundlage für die Erstellung eines Objekts dar. Klassen können zum Erstellen von Objekten verwendet werden. Diese werden häufig als Instanz bezeichnet.
import arcpy
spatial_ref = arcpy.SpatialReference("Hawaii Albers Equal Area Conic")
Arbeiten mit Modulen
ArcPy beinhaltet Module, die andere Bereiche von ArcGIS abdecken. ArcPy wird von einer Reihe von Modulen unterstützt, einschließlich eines Datenzugriffsmoduls (arcpy.da), eines Moduls zur Kartenerstellung (arcpy.mapping), eines Erweiterung "ArcGIS Spatial Analyst"-Moduls (arcpy.sa) und eines Erweiterung "ArcGIS Network Analyst"-Moduls (arcpy.na).
So verwenden z. B. die Werkzeuge des Moduls arcpy.sa Werkzeuge aus der Toolbox "Spatial Analyst", sind jedoch für die Unterstützung von Map Algebra konfiguriert. Die Ausführung von arcpy.sa.Slope entspricht daher der Ausführung des Werkzeugs Neigung in der Toolbox "Spatial Analyst".