Verwenden von Werkzeugen in Python
Alle Geoverarbeitungswerkzeuge verfügen ü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:
Name |
Jedem Werkzeugparameter ist ein eindeutiger Name zugewiesen. |
Typ |
Der Typ der erwarteten Daten, z. B. "Feature-Class", "Ganzzahl", "Zeichenfolge" oder "Raster". |
Richtung |
Der Parameter definiert Eingabe- oder Ausgabewerte. |
Erforderlich |
Entweder muss ein Wert für einen Parameter eingegeben werden, oder der Parameter ist optional. |
Wenn ein Werkzeug in einem Skript verwendet wird, müssen die Parameterwerte korrekt festgelegt werden, damit das Werkzeug mit dem Skript ausgeführt werden kann. In der Dokumentation zu den einzelnen Werkzeugen sind die Parameter und Eigenschaften klar definiert. 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.
Die meisten Werkzeugparameter können als einfache Zeichenfolge angegeben werden. Für einige Parameter, z. B. einen Raumbezug, können Sie ein Objekt statt einer Zeichenfolge verwenden. Im folgenden Codebeispiel wurden Eingabe- und Ausgabeparameter für das Werkzeug Puffer angegeben. Beachten Sie, dass der Werkzeugname immer 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:/St_Johns/data.gdb/roads"
output = "c:/St_Johns/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")
Im folgenden Codebeispiel wird das Werkzeug CreateFeatureClass mit einem Raumbezugsobjekt für den optionalen Parameter für das Koordinatensystem ausgeführt. Das Raumbezugsobjekt wird mit der Methode SpatialReference-Klasse erstellt und die Informationen werden aus einer Projektionsdatei geladen.
import arcpy
inputWorkspace = "c:/temp"
outputName = "rivers.shp"
# Create a spatial reference object
#
spatialRef = arcpy.SpatialReference()
# Use a projection file to define the spatial reference's properties
#
spatialRef.createFromFile("c:/program files/arcgis/Desktop10.1/Coordinate Systems/" + \
"Projected Coordinate Systems/Continental/North America/North America Equidistant Conic.prj")
# Run CreateFeatureclass using the spatial reference object
#
arcpy.CreateFeatureclass_management(inputWorkspace, outputName,
"POLYLINE", "", "", "", spatialRef)
Werkzeugorganisation
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 Präferenzen und Codierungsgewohnheiten ab. Im folgenden Beispiel wird das Werkzeug GetCount auf beide Arten gezeigt.
import arcpy
inFeatures = "c:/temp/rivers.shp"
# Tools can be accessed as functions on the arcpy module, and
# from modules matching the toolbox name.
#
arcpy.GetCount_management(inFeatures)
arcpy.management.GetCount(inFeatures)
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 diesem Fall 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"
streetsCopy = "c:/output/Output.gdb/streetsBackup"
DM.CopyFeatures(streets, streetsBackup)
EDIT.TrimLine(streets, "10 Feet", "KEEP_SHORT")
EDIT.ExtendLine(streets, "15 Feet", "EXTENSION")
Werkzeuge der Erweiterung Erweiterung "ArcGIS Spatial Analyst" werden anders behandelt, um Map Algebra einzubeziehen, und sind nur im arcpy.sa-Modul verfügbar und nicht als Funktionen für ArcPy.
Abrufen von Ergebnissen von einem Werkzeug
ArcPy gibt bei der Ausführung eines Werkzeugs dessen Ausgabewerte als Ergebnisobjekt 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 = "D:/St_Johns/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
# To get the output value, the result object has a getOutput method
#
resultValue = result.getOutput(0)
Die getOutput-Methode des Ergebnisobjekts gibt eine Unicode-Zeichenfolge von Ergebnisobjekten zurück, die über Ausgabewerte verfügen. Dies ist wichtig bei Werkzeugen mit einem abgeleiteten Ausgabeparameter wie GetCount, das die Anzahl von Datensätzen in einer Tabelle zurückgibt, und Werkzeugen wie CalculateDefaultClusterTolerance, das einen Cluster-Toleranzwert bereitstellt. Um den Wert in den erwarteten Typ zu konvertieren, muss die Unicode-Zeichenfolge mit integrierten Python-Funktionen wie int() oder float() umgewandelt werden.
Ein abgeleiteter Parameter erfordert kein Handeln vom Benutzer, 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
from arcpy import env
import types
env.workspace = "c:/St_Johns/data.gdb"
# Many geoprocessing tools return a result object of the derived
# output dataset. A print statement will display the string
# representation of the output.
#
result = arcpy.GetCount_management("roads")
resultValue = result.getOutput(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(resultValue)
print count
print types.TypeType(count)
Eigenschaften und Methoden |
Erläuterung |
---|---|
inputCount | Gibt die Anzahl der Eingaben zurück. |
outputCount |
Gibt die Anzahl der Ausgaben zurück. |
messageCount |
Gibt die Anzahl der Meldungen zurück. |
maxSeverity |
Gibt die maximale Gewichtung zurück. Mögliche Werte für die zurückgegebene Gewichtung sind 0 (keine Fehler/Warnungen ausgelöst), 1 (Warnungen ausgelöst) und 2 (Fehler ausgelöst). |
resultID |
Gibt die eindeutige Ergebnis-ID zurück. Wenn es sich bei dem Werkzeug nicht um einen Geoverarbeitungs-Service handelt, ist resultID gleich "". |
Status |
Gibt den Status des Auftrags auf dem Server zurück.
|
cancel() |
Bricht den Auftrag auf dem Server ab. |
getInput(index) |
Gibt eine bestimmte Eingabe zurück. Bei einem Datensatz- oder einem Raster-Daten-Objekt wird ein RecordSet- bzw. RasterData-Objekt zurückgegeben. |
getMapImageURL(ParameterList, Height, Width, Resolution) |
Ruft für eine bestimmte Ausgabe das Karten-Service-Image ab. |
getMessage(index) |
Gibt eine bestimmte Meldung zurück. |
getMessages(severity) |
Folgende Meldungstypen können zurückgegeben werden: 0 (Meldung), 1 (Warnung), 2 (Fehler). Wenn Sie keinen Wert angeben, werden alle Meldungstypen zurückgegeben. |
getOutput(index) |
Gibt eine bestimmte Ausgabe zurück. Bei einem Datensatz- oder einem Raster-Daten-Objekt wird ein RecordSet- bzw. RasterData-Objekt zurückgegeben. |
getSeverity(index) |
Gibt die Gewichtung einer bestimmten Meldung zurück. |