Использование сервисов геообработки в Python

Как и другие инструменты геообработки, серверные инструменты геообработки имеют фиксированный набор параметров, которые обеспечивают инструмент необходимой информацией. При использовании асинхронных серверных инструментов в скрипте выходные данные могут быть получены с помощью объекта Результат метода getOutput.

Подсказка:

Функция IsSynchronous может быть использована для определения режима работы инструмента: синхронного или асинхронного. Если инструмент является синхронным, результат возвращается автоматически, но до завершения работы инструмента нельзя предпринимать никаких действий.

В следующем примере функция GetParameterValue используется для получения объекта FeatureSet из серверного инструмента. Этот объект FeatureSet содержит схему входных параметров инструмента. Затем объект FeatureSet загружается в класс пространственных объектов, а серверный инструмент выполняется на сервере. Скрипт заканчивается методом getOutput объекта Result, для получения выходных данных, которые затем сохраняются локально с помощью метода FeatureSet save.


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[0]
outFeatSet.save("c:/temp/base.gdb/towers_buffer")

Получение результата растрового типа из серверного инструмента

Результат в виде растра возвращается в формате Tagged Image File Format (TIFF). По умолчанию при использовании метода getOutput файл TIFF записываются в системную папку TEMP. Для управления местоположением файла TIFF необходимо задать соответствующую папку в качестве параметра среды scratchWorkspace.


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[0]

Получение изображения карты

Сервисы геообработки могут иметь результат в виде сервиса карты, что позволяет создать картографическое изображение с результатами выполненной задачи. Цифровые карты содержат визуальное представление географических наборов данных. Цифровые карты передаются через интернет в виде изображений (таких как .jpeg). Изображение карты содержит более понятную для человека информацию, чем необработанные объекты в классе пространственных объектов. Изображениями карты также можно управлять – они легко сжимаются, их можно соединять в управляемые блоки, и кроме того имеются методы их транспортировки и просмотра по сети Интернет.

Изображения карты создаются с помощью картографического сервиса ArcGIS Server и являются результатом публикации документа ArcMap (.mxd). Учитывая характеристики изображения карты, может быть удобнее создать изображение по результатам работы инструмента геообработки и передать его по сети Интернет, чем передавать полученный набор или наборы данных. Сервисы геообработки могут иметь выходной картографический сервис, используемый ArcGIS Server для создания изображений карты с выходными данными.


import arcpy
import time
from urllib.request import urlretrieve
# 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.request's urlretrieve method to copy the image locally
urlretrieve(mapimage, "c:/base/road_buffer.jpg")