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 die neuen Ausgabedaten erzeugt werden. Parameter weisen mehrere wichtige Eigenschaften auf:

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 bereitgestellt wurden, kann das Werkzeug ausgeführt werden. Parameter werden als Zeichenfolge oder Objekt angegeben.

Zeichenfolgen bestehen einfach aus Text, mit dem ein Parameterwert eindeutig bestimmt wird, z. B. ein Pfad zu einem Dataset oder ein Schlüsselwort. Im folgenden Codebeispiel wurden 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 wurden 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, in 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 Pfundzeichen "#" 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 Ergebnisobjekts 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 Ausgabe aus dem Ergebnisobjekt 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 Ergebnisobjekts oder beim Verwenden der getOutput()-Methode ist der Rückgabewert eine Unicode-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. Um die Unicode-Zeichenfolge in den erwarteten Typ zu konvertieren, können integrierte Python-Funktionen wie int() oder float() verwendet werden.

HinweisHinweis:

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(), long(), float()
count = int(result_value)
print count
print types.TypeType(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 verschiedene Arten organisiert. Alle Werkzeuge sind als Funktionen auf 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 aufmerksam machen, wie ein Modul identifiziert 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")
LizenzLizenz:

Die Werkzeuge der Erweiterung "ArcGIS Spatial Analyst" werden anders behandelt, um Map Algebra unterzubringen, und sind nur im arcpy.sa-Modul und nicht als Funktionen für ArcPy verfügbar.

Verwandte Themen

5/9/2014