Verwenden von Geoverarbeitungs-Services in Python
Wie andere Geoverarbeitungswerkzeuge auch verfügen Serverwerkzeuge für die Geoverarbeitung über eine festgelegte Anzahl von Parametern, über die das Werkzeug die für seine Ausführung erforderlichen Informationen erhält. Bei der Verwendung von asynchronen Serverwerkzeugen in einem Skript kann die Ausgabe von der getOutput-Methode des Ergebnisses abgerufen werden.
Die Funktion IsSynchronous kann verwendet werden, um zu bestimmen, ob ein Werkzeug synchron oder asynchron ausgeführt wird. Wenn ein Werkzeug synchron ist, werden die Ergebnisse automatisch zurückgegeben, aber es kann keine andere Aktion durchgeführt werden, bis das Werkzeug abgeschlossen wurde.
Im folgenden Beispiel wird mit der Funktion GetParameterValue ein FeatureSet-Objekt aus einem Serverwerkzeug abgerufen. Das FeatureSet-Objekt enthält das Schema für den Eingabeparameter des Werkzeugs. Anschließend wird eine Feature-Class in das FeatureSet-Objekt geladen und das Serverwerkzeug auf dem Server ausgeführt. Am Ende ruft das Skript mit der Methode getOutput des Ergebnisobjekts die Werkzeugausgabe ab, die dann mit der Methode "Save" des FeatureSet-Objekts lokal gespeichert wird.
import arcpy
import time
# Add a toolbox from a server
#
arcpy.ImportToolbox("http://flame7/arcgis/services;GP/BufferByVal", "mytools")
# Use GetParameterValue to get a featureset object with the default
# schema of the first parameter of the tool 'bufferpoints'
#
inFeatureSet = arcpy.GetParameterValue("bufferpoints", 0)
# Load a shapefile into the featureset
#
inFeatureSet.load("c:/base/roads.shp")
# Run a server tool named BufferPoints with featureset created above
#
result = arcpy.BufferPoints_mytools(inFeatureSet, "5 feet")
# Check the status of the result object every 0.2 seconds until it has a value
# of 4 (succeeded) or greater
#
while result.status < 4:
time.sleep(0.2)
# Get the output FeatureSet back from the server and save to a local geodatabase
#
outFeatSet = result.getOutput(0)
outFeatSet.save("c:/temp/base.gdb/towers_buffer")
Abrufen von Raster-Ergebnissen von einem Serverwerkzeug
Raster-Ergebnisse werden im TIFF-Format (Tagged Image File Format) zurückgegeben. Bei Verwendung der Methode getOutput wird die TIFF-Datei normalerweise im TEMP-Ordner des Systems abgelegt. Wenn Sie einen anderen Speicherort für die TIFF-Datei festlegen möchten, legen Sie die Umgebungseinstellung für scratchWorkspace auf einen Ordner fest.
import arcpy
import time
# Set the scratchworkspace to a folder.
#
arcpy.env.scratchWorkspace = "c:/temp/rasteroutput"
# Add a toolbox from a server
#
arcpy.ImportToolbox("http://flame7/arcgis/services;SlopeByVal", "mytools")
dem = "c:/dems/k_ne_g"
# Run a server tool named RunSlope
#
result = arcpy.RunSlope_mytools(dem)
# Check the status of the result object every 0.2 seconds until it has a value
# of 4 (succeeded) or greater
#
while result.status < 4:
print result.status
time.sleep(0.2)
# Raster output will be written to the scratchworkspace
#
outTIFF = result.getOutput(0)
Abrufen eines Kartenbildes
Geoverarbeitungs-Services können mit einem Karten-Service des Ergebnisses ein digitales Kartenbild von Task-Ergebnissen erstellen. Digitale Karten enthalten visuelle Darstellungen geographischer Datasets, die Informationen vermitteln. Digitale Karten werden im Internet als Bilder (z. B. JPEG-Dateien) übermittelt. Ein aus einzelnen Bytes zusammengesetztes Kartenbild enthält weitaus mehr durch den Benutzer auswertbare Informationen als unbearbeitete Features in einer Feature-Class. Kartenbilder sind außerdem bequem zu handhaben: Sie lassen sich einfach komprimieren, sie können in verwaltbare Einheiten aufgeteilt werden, und es gibt bewährte Methoden, um sie über das Internet zu übertragen und anzuzeigen.
Kartenbilder werden von einem ArcGIS for Server-Karten-Service erstellt und durch das Veröffentlichen eines ArcMap-Dokuments (.mxd) erzeugt. Aufgrund der Eigenschaften von Kartenbildern sollten Sie ein Kartenbild für die Ergebnisse des Geoverarbeitungs-Tasks erstellen und dann das Kartenbild über das Internet übertragen, statt ein oder mehrere Ergebnis-Datasets zu übertragen. Geoverarbeitungs-Services können über einen Karten-Service des Ergebnisses verfügen, der von ArcGIS for Server zum Erstellen von Kartenbildern der Ausgabedaten verwendet wird.
import arcpy
import time
import urllib
# Add a toolbox from a server
#
arcpy.ImportToolbox("http://flame7/arcgis/services;GP/BufferByVal", "mytools")
# Use GetParameterValue to get a featureset object with the default schema of the
# first parameter of the tool 'bufferpoints'
#
inFeatureSet = arcpy.GetParameterValue("bufferpoints", 0)
# Load a shapefile into the featureset
#
inFeatureSet.load("c:/base/roads.shp")
# Run a server tool named BufferPoints with featureset created above
#
result = arcpy.BufferPoints_mytools(inFeatureSet, "5 feet")
# Check the status of the result object every 0.2 seconds until it has a value
# of 4 (succeeded) or greater
#
while result.status < 4:
time.sleep(0.2)
print result.status
# Return a map service
#
mapimage = result.getMapImageURL(0)
# Use Python's urllib module's urlretrieve method to copy the image locally
#
urllib.urlretrieve(mapimage, "c:/base/road_buffer.jpg")