Utilisation des services de géotraitement dans Python
Comme d'autres outils de géotraitement, les outils serveur de géotraitement disposent d'un ensemble défini de paramètres qui fournissent à l'outil les informations nécessaires à son exécution. Lors de l'utilisation d'outils serveur asynchrones dans un script, la sortie peut être récupérée par la méthode getOutput du résultat.
La fonction IsSynchronous permet de déterminer si un outil est exécuté de manière synchrone ou asynchrone. Lorsqu'un outil est synchrone, les résultats sont retournés automatiquement, mais aucune autre action ne peut être effectuée avant la fin de son exécution.
Dans l'exemple suivant, la fonction GetParameterValue est utilisée pour obtenir un objet FeatureSet à partir d'un outil serveur. Cet objet FeatureSet contient la structure du paramètre en entrée de l'outil. L'objet FeatureSet est ensuite chargé avec une classe d'entités et l'outil serveur est exécuté sur le serveur. Le script se termine en utilisant la méthode getOutput de l'objet Result pour obtenir la sortie de l'outil qui est alors enregistrée localement à l'aide de la méthode save de FeatureSet.
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")
Obtention d'un résultat raster à partir d'un outil serveur
Les résultats raster sont renvoyés au format TIFF (Tagged Image File Format). Par défaut, lorsque vous utilisez getOutput, le fichier TIFF est enregistré dans le dossier TEMP de votre système. Pour contrôler l'emplacement du fichier TIFF, définissez l'environnement scratchWorkspace sur un dossier.
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)
Obtention d'une carte de type image
Les services de géotraitement peuvent utiliser un service de carte obtenu pour créer une carte de type image numérique des résultats de tâche. Les cartes numériques contiennent des représentations visuelles de jeux de données géographiques qui communiquent des informations. Les cartes numériques sont transférées sur le Web en tant qu'images (.jpeg, par exemple). Une carte de type image contient, à nombre d'octets égal, beaucoup plus informations pouvant être interprétées par l'homme que les entités brutes figurant dans une classe d'entités. Les cartes de type image sont également gérables. Elles sont facilement compressibles et peuvent être fractionnées en unités gérables. Il existe également des méthodes établies pour les transporter et les afficher sur le Web.
Les cartes de type image, qui sont créées par un service de carte ArcGIS for Server, sont issues de la publication d'un document ArcMap (.mxd). En raison de ses caractéristiques, vous pouvez créer une carte de type image pour les résultats de votre tâche de géotraitement, puis transférer l'image sur le Web à la place du jeu ou des jeux de données obtenus. Les services de géotraitement peuvent disposer d'un service de carte obtenu utilisé par ArcGIS for Server pour créer des cartes de type image de vos données en sortie.
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")