Сервисы геообработки в Python

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

Подсказка:

Функция 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.mytools.BufferPoints(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.mytools.RunSlope(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.mytools.BufferPoints(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")