Verwenden von Werkzeugen in Python

Ein Geoverarbeitungswerkzeug verfügt über einen festen Satz von Parametern, über die das Werkzeug die Informationen erhält, die für seine Ausführung erforderlich sind. Werkzeuge enthalten i. d. R. Eingabeparameter, die die Datasets definieren, mit denen neue Ausgabedaten erzeugt werden. Parameter weisen mehrere wichtige Eigenschaften auf:

  • Jeder Parameter erwartet einen oder mehrere bestimmte Datentypen wie z. B. Feature-Class, Ganzzahlwert, Zeichenfolge oder Raster.
  • Ein Parameter erwartet entweder einen Eingabe- oder einen Ausgabewert.
  • Ein Parameter ist entweder erforderlich oder optional.
  • Jedem Werkzeugparameter ist ein eindeutiger Name zugewiesen.

Wenn ein Werkzeug in Python verwendet wird, müssen die Parameterwerte richtig festgelegt werden, damit das Werkzeug mit dem Skript ausgeführt werden kann. Sobald gültige Parameterwerte angegeben werden, kann das Werkzeug ausgeführt werden. Parameter werden als Zeichenfolge oder Objekt angegeben.

Zeichenfolgen bestehen aus Text, mit dem ein Parameterwert eindeutig bestimmt wird, z. B. ein Pfad zu einem Dataset oder ein Schlüsselwort. Im folgenden Codebeispiel werden Eingabe- und Ausgabeparameter für das Werkzeug Puffer angegeben. Beachten Sie, dass der Werkzeugname mit seinem Toolbox-Aliasnamen angehängt wird. Die Eingabe- und Ausgabeparameter werden mit zwei Zeichenfolgenvariablen definiert, damit der Aufruf des Werkzeugs leichter lesbar ist.

import arcpy
roads = "c:/base/data.gdb/roads"
output = "c:/base/data.gdb/roads_Buffer"
# Run Buffer using the variables set above and pass the remaining 
# parameters in as strings
arcpy.Buffer_analysis(roads, output, "distance", "FULL", "ROUND", "NONE")

Für einige Parameter, z. B. einen Raumbezug, kann auch ein Objekt angegeben werden. Im folgenden Codebeispiel wird das Werkzeug Feature-Class erstellen mit einem SpatialReferencesobjekt für den optionalen Parameter "Koordinatensystem" ausgeführt.

import arcpy
in_workspace = "c:/temp"
output_name = "rivers.shp"
# Create a spatial reference object
spatial_ref = arcpy.SpatialReference('North America Equidistant Conic')
# Run CreateFeatureclass using the spatial reference object
arcpy.CreateFeatureclass_management(
    in_workspace, output_name, spatial_reference=spatial_ref)

Die meisten Geoverarbeitungswerkzeuge enthalten erforderliche und optionale Argumente. Es gibt häufig Fälle, bei denen viele optionale Argumente vorhanden sind, die nicht angegeben werden müssen. Es gibt einige Strategien zum Umgang mit diesen nicht verwendeten Argumenten. Eine besteht darin, die Reihenfolge aller optionalen Argumente beizubehalten und diejenigen, die Sie nicht benötigen, als leere Zeichenfolge "", als Raute-Zeichen "#" oder mit dem Typ None zu referenzieren. Die zweite Strategie besteht darin, Schlüsselwortargumente zu verwenden und mit dem Argumentnamen einen Wert zuzuweisen. Durch die Verwendung von Schlüsselwortargumenten können Sie nicht verwendete optionale Argumente überspringen oder in anderen Reihenfolgen angeben.

Überspringen von optionalen Argumenten unter Verwendung von leeren Zeichenfolgen.

import arcpy
arcpy.AddField_management("schools", "school_id", "LONG", "", "", "", "", "NON_NULLABLE")

Eine bessere Alternative; Überspringen optionaler Argumente unter Verwendung von Schlüsselwortargumenten.

import arcpy arcpy.AddField_management("schools", "school_id", "LONG", field_is_nullable="NON_NULLABLE")

Werkzeugausgabe

ArcPy gibt bei der Ausführung eines Werkzeugs dessen Ausgabewerte als Resultobjekt zurück. Der Vorteil eines ausgegeben Objekts besteht darin, dass Informationen über die Werkzeugausführung, einschließlich der Meldungen, Parameter und der Ausgabe, verwaltet werden können. Die Ergebnisse bleiben erhalten, selbst wenn zwischenzeitlich mehrere andere Werkzeuge ausgeführt werden.

Die folgenden Beispiele zeigen, wie Sie nach der Ausführung eines Geoverarbeitungswerkzeugs die Werte des ausgegebenen Objekts abrufen können.

import arcpy
arcpy.env.workspace = "c:/city/data.gdb"
# Geoprocessing tools return a result object of the derived output dataset. 
result = arcpy.CopyFeatures_management("roads", "urban_roads")
# A print statement will display the string representation of the output.
print(result)
# A result object can be indexed to get the output value. Note: a result object 
# also has a getOutput() method that can be used for the same purpose.
result_value = result[0]

Beim Indizieren des ausgegeben Objekts oder beim Verwenden der getOutput()-Methode ist der Rückgabewert eine Zeichenfolge. Dies ist wichtig bei Werkzeugen mit einem abgeleiteten Ausgabeparameter wie Get Count, das die Anzahl von Datensätzen in einer Tabelle zurückgibt, oder Calculate Default Cluster Tolerance, das einen Cluster-Toleranzwert bereitstellt. Zum Konvertieren in den erwarteten Typ können integrierte Python-Funktionen wie int() oder float() verwendet werden.

Hinweis:

Ein abgeleiteter Parameter erfordert keine Benutzerinteraktion, und er wird nicht im Dialogfeld des Werkzeugs oder als Argument für das Werkzeug in Python angezeigt. Abgeleitete Typen sind immer Ausgabeparameter.

import arcpy
import types
arcpy.env.workspace = "c:/base/data.gdb"
# Many geoprocessing tools return a result object of the derived output dataset.
result = arcpy.GetCount_management("roads")
result_value = result[0]
# The result object's getOutput method returns values as a unicode string. To 
# convert to a different Python type, use built-in Python functions: str(), 
# int(), float()
count = int(result_value)
print(count)
print(type(count))

Beim Erstellen von Ausgaben, die lediglich einen Zwischenschritt eines größeren Workflows darstellen, kann das Ausgabeargument ausgelassen werden, damit das Werkzeug einen eindeutigen Pfad und Namen für die Ausgabe erstellen kann. Stellen Sie zu diesem Zweck die Ausgabe auf "#" oder "Keine" ein, oder überspringen Sie das Argument vollständig, wenn die Ausgabe das zuletzt verwendete Argument ist. In jedem Fall ist der zurückgegebene Wert der vollständige Pfad zur neuen Datenquelle.

import arcpy
arcpy.env.workspace = "c:/city/data.gdb"
result = arcpy.CopyFeatures_management("roads", "#")
result = arcpy.CopyFeatures_management("roads", "")
result = arcpy.CopyFeatures_management("roads")

Werkzeugorganisation in ArcPy

Geoverarbeitungswerkzeuge werden auf zwei Arten organisiert. Alle Werkzeuge sind als Funktionen von ArcPy verfügbar, aber auch in Modulen, die dem Toolbox-Aliasnamen entsprechen. Obwohl die meisten der Beispiele in der Hilfe Werkzeuge als in ArcPy verfügbare Funktionen zeigen, sind beide Ansätze gültig. Welche Vorgehensweise Sie verwenden, hängt von den persönlichen Vorlieben und Codierungsgewohnheiten ab. Im folgenden Beispiel wird das Werkzeug Anzahl erhalten auf beide Arten gezeigt.

import arcpy
in_features = "c:/temp/rivers.shp"
# Tools can be accessed as functions on the arcpy module
arcpy.GetCount_management(in_features)
# Or from modules matching the toolbox name
arcpy.management.GetCount(in_features)

Wenn Sie Werkzeuge in Modulen verwenden, möchten Sie unter Umständen darauf hinweisen, wie ein Modul eingesetzt wird, um das Skript besser lesbar zu machen. In diesen Fällen können Sie die Form from - import - as verwenden.

# Clean up street centerlines that were digitized without
# having set proper snapping environments
import arcpy
from arcpy import edit as EDIT
from arcpy import management as DM
streets = "c:/data/streets.gdb/majorrds"
streets_copy = "c:/output/Output.gdb/streetsBackup"
DM.CopyFeatures(streets, streets_copy)
EDIT.TrimLine(streets, "10 Feet", "KEEP_SHORT")
EDIT.ExtendLine(streets, "15 Feet", "EXTENSION")
Lizenz:

Spatial Analyst- und Image Analyst-Werkzeuge werden zum Einsatz von Map Algebra anders eingesetzt. Sie sind nur in den Modulen arcpy.sa und arcpy.ia und nicht als Funktionen für ArcPy verfügbar.