CreateGPSDDraft (arcpy)
Краткая информация
Данная функция конвертирует объекты Result и файлы результата (.rlt) в файлы черновика определения сервиса (Service Definition Draft) (.sddraft).
Проект определения сервиса не содержит данные. Проект сервиса сам по себе не может использоваться для публикации сервиса.
Обсуждение
CreateGPSDDraft – это первый шаг для автоматизации публикации результатов геообработки на ГИС-сервере с помощью ArcPy. Результатом работы CreateGPSDDraft является файл черновика определения сервиса (Service Definition Draft) (.sddraft). Черновик определения сервиса (Service Definition Draft) – это комбинация файла результата или объекта Result, информации о сервере и набора свойств сервиса. Объект Результат (Result) может быть создан в скрипте Python с помощью задания переменной при выполнении инструмента, например, следующий результат буфера будет сохранен в переменную с названием result.
import arcpy
result = arcpy.Buffer_analysis("inPts", "output.shp", "100 Meters")
Информация о сервере содержит подключение к серверу, тип сервера, на который выполняется публикация, тип публикуемого сервиса, метаданные для сервиса (информация об элементе Item) и ссылки на данные (копируются данные на сервер или нет).
Свойства сервиса включают геообработку и дополнительные возможности сервиса, такие как Web Processing Services (WPS). Эти возможности сервиса не представлены в виде параметра. Если вам необходимо изменить значение (или любой другой параметр, который не представлен), вам необходимо опубликовать сначала sddraft, а затем изменить черновик путем редактирования .sddraft с помощью библиотек XML, таких как xml.dom.minidom. Для ознакомления с использованием библиотеки, см. пример изменения sddraft. Хотя этот пример предназначен для черновика картографического сервиса, вы можете использовать ту же библиотеку и метод для черновика сервиса геообработки, поскольку он представлен в виде файла XML.
Эта функция возвращает словарь Python с ошибками и другими потенциальными проблемами, которые необходимо устранить до создания вашего файла определения сервиса Service Definition.
Проект определения сервиса можно создать без информации о подключении к серверу. В этом случае параметр connection_file_path можно опустить, однако параметр server_type необходимо задать. Подключение к серверу можно задать позже, когда черновик определения сервиса уже опубликован с помощью инструмента Загрузить определение сервиса (Upload Service Definition).
Черновик определения сервиса (Service Definition Draft) затем может быть конвертирован в полностью готовый файл определения сервиса (.sd) с помощью инструмента Промежуточный сервис (Stage Service) . Во время подготовки компилируется вся информация, необходимая для успешной публикации ГИС-ресурса. Если данные не зарегистрированы на сервере, они будут добавлены после подготовки проекта определения сервиса. Наконец, файл определения сервиса можно загрузить и опубликовать как ГИС-сервис на заданном сервере ГИС с помощью инструмента Загрузить определение сервиса (Upload Service Definition). На этом шаге файл определения сервиса копируется на сервер, извлекается необходимая информация и публикуется ГИС-ресурс. Дополнительные сведения см. в разделе Обзор группы инструментов Публикация (Publishing).
Синтаксис
Параметр | Объяснение | Тип данных |
result [result,...] |
Ссылка на один или несколько объектов Результат (Result) или файлов результата (.rlt) на диске. Множество результатов должно быть предоставлено в формате списка. Следующий пример демонстрирует использование множества результатов в качестве входных данных для функции CreateGPSDDraft.
| Result |
out_sddraft | Строка, представляющая путь и имя файла для выходного файла черновика определения сервиса (Service Definition Draft) (.sddraft). | String |
service_name | Строка, представляющая имя сервиса. Это имя будут видеть пользователи и идентифицировать по нему сервис. Имя может содержать только буквы, цифры и подчеркивания. В имени нельзя использовать пробелы и специальные символы. Длина имени не должна превышать 120 символов. | String |
server_type |
Строка, представляющая тип сервера. Если параметр connection_file_path не указан, следует предоставить параметр server_type. Если параметр connection_file_path не указан, параметр server_type берется из файла подключения. В этом случае можно выбрать FROM_CONNECTION_FILE или пропустить весь параметр.
(Значение по умолчанию — ARCGIS_SERVER) | String |
connection_file_path |
Строка, содержащая путь и имя файла подключения ArcGIS for Server (.ags). | String |
copy_data_to_server |
Булев параметр, указывающий на то, будут ли данные, на которые ссылается result, скопированы на сервер или нет. Параметр copy_data_to_server используется, только если значение server_type равно ARCGIS_SERVER, а параметр connection_file_path не указан. Если параметр connection_file_path указан, используются зарегистрированные хранилища данных сервера. Например, если данные в result зарегистрированы на сервере, значение copy_data_to_server всегда будет равно False. И наоборот, если данные в result не зарегистрированы на сервере, значение copy_data_to_server всегда будет равно True. (Значение по умолчанию — False) | Boolean |
folder_name |
Строка, представляющая имя папки, в которой требуется опубликовать определение сервиса. Если папка не существует, она будет создана. Папкой по умолчанию является корневая папка сервера. (Значение по умолчанию — None) | String |
summary | Строка, представляющая сводку описания элемента. Используйте этот параметр для замены сводки пользовательского интерфейса или предоставления сводки, если она не существует. Приведенная здесь сводка не будет сохранена в документе карты. (Значение по умолчанию — None) | String |
tags | Строка, представляющая теги описания элемента. Используйте этот параметр для замены тегов пользовательского интерфейса или введения тегов, если они отсутствуют. Приведенные здесь теги не будут сохранены в документе карты. (Значение по умолчанию — None) | String |
executionType | Синхронность и асинхронность определяют, как клиент (приложение, использующее задачу) будет взаимодействовать с сервером и получать результаты выполнения задачи. Когда сервис настроен на синхронность, клиент ждет, пока задача будет закончена. Как правило, синхронная задача выполняется быстро – 5 секунд и меньше. Асинхронная задача обычно выполняется медленнее, а клиент должен периодически запрашивать сервер, выполнена ли задача, и если задача выполнена, получить результат. Веб-приложение, использующее асинхронную задачу, должно иметь реализованную логику для проверки статуса задания и обработки результата, когда выполнение завершено. Клиенты ArcGIS for Desktop поддерживают оба типа выполнения. (Значение по умолчанию — Asynchronous) | String |
resultMapServer | При публикации сервиса геообработки можно выбрать просмотр результата всех задач сервиса в виде карты (в дополнение к любым другим результатам задачи). Карта создается на сервере с помощью картографического сервиса (Map Service), а затем отправляется обратно клиенту в виде изображения (например, .jpeg). Символы, надписи, прозрачность и все другие свойства возвращенной карты соответствуют настройкам вашего выходного слоя. Не забывайте, что, если вы создаете слои результата в среде скриптов Python (вне ArcMap), то будут использоваться символы, установленные по умолчанию. Чтобы управлять символами, вам необходимо создать файлы слоя заново с расширенными возможностями символов, и использовать их для изменения выходных символов для вашей задачи. При выборе этой опции картографический сервис автоматически создается на сервере с тем же именем, что и сервис геообработки. (Значение по умолчанию — False) | Boolean |
showMessages | Строка, задающая уровень сообщения для сервиса геообработки. Далее приведен список доступных уровней сообщений, которые сервис будет возвращать клиенту.
(Значение по умолчанию — None) | String |
maximumRecords | Максимальное количество результатов, которое сервис может вернуть клиенту. Определение большего значения для этого параметра будет означать, что ГИС сервер сможет обрабатывать отправку большого числа отдельных записей или объектов клиенту. Если не нужно возвращать какие-либо объекты, установите для этого параметра значение 0 (нуль). Как правило, это значение равно нулю только при включенном параметра Просмотреть результат с помощью картографического сервиса. (Значение по умолчанию — 1000) | Integer |
minInstances | Целочисленное значение, представляющее минимальное число экземпляров, которые будут запущены сервисом и станут доступны для использования. Для сервисов с большой нагрузкой вам может понадобиться увеличить это значение. (Значение по умолчанию — 1) | Integer |
maxInstances | Целочисленное значение, представляющее максимальное число экземпляров, которые могут быть запущены сервисом и быть доступными для использования. Для сервисов с большой нагрузкой вам может понадобиться увеличить это значение. Убедитесь, что на сервере присутствует достаточное аппаратное обеспечение для поддержки того максимального числа экземпляров, которое вы установили. (Значение по умолчанию — 2) | Integer |
maxUsageTime | Максимальное время (в секундах) использования сервиса. Может понадобится увеличить значение по умолчанию, равное 600 секунд (10 мин), чтобы выполнять долгосрочные задачи геообработки. Кроме того, может понадобиться уменьшить это время, чтобы клиент не использовал сервисы чрезмерно. (Значение по умолчанию — 600) | Integer |
maxWaitTime | Максимальное время в секундах, в течение которого клиент будет ждать подключения к экземпляру, прежде чем истечет срок ожидания. Когда все экземпляры заняты обработкой запросов, последующие запросы добавляются в очередь. Если срок ожидания истекает до того, как экземпляр станет доступным, задача завершится со сбоем. Значение по умолчанию – 60 секунд (1 минута). (Значение по умолчанию — 60) | Integer |
maxIdleTime | Максимальное время в секундах, в течение которого экземпляр будет оставаться активным до сжатия пула. Любые экземпляры, которые превышают минимальное количество неиспользованных экземпляров, будут закрыты после истечения максимального времени в состоянии простоя. (Значение по умолчанию — 1800) | Integer |
Тип данных | Объяснение |
Dictionary |
Возвращает словарь информационных сообщений, предупреждений и сообщений об ошибках Python. |
Пример кода
Следующий скрипт демонстрирует полный процесс публикации сервиса геообработки с использованием скриптов Python. Автоматизация сервисов геообработки использует комбинацию функций ArcPy и инструментов геообработки в составе набора инструментов Публикация (Publishing). Рабочий процесс начинается с выполнения задачи геообработки, которую вы хотите опубликовать. После успешного запуска задачи геообработки и сохранения файла результата, используйте функцию ArcPy CreateGPSDDraft для создания черновика определения сервиса. Помните, что Описание элемента (Item Description), Сводка (Summary) и Теги (Tags) во входном результате геообработки перезаписываются значениями параметров summary и tags. Затем воспользуйтесь функцией AnalyzeForSD, чтобы проанализировать черновик определения сервиса на предмет ошибок, которые могут помешать успешной публикации сервиса. После анализа черновика определения сервиса и устранения ошибок можно подготовить определение сервиса. В ходе подготовки в черновике определения сервиса консолидируется вся информация, необходимая для публикации сервиса в полном определении сервиса. Воспользуйтесь инструментом геообработки Разместить сервис (Stage Service) для подготовки определения сервиса. Наконец, запустите инструмент геообработки Загрузить определение сервиса (Upload Service Definition) для отправки определения сервиса на сервер и публикации сервиса геообработки.
import arcpy
result = "c:/gis/gp/Analysis.rlt"
connectionPath = "c:/gis/conections/myServer.ags"
sddraft = "c:/gis/gp/drafts/AnalysisDraft.sddraft"
sd = "c:/gis/gp/sd/AnalysisDraft.sd"
serviceName = "AnalysisService"
# Create service definition draft
arcpy.CreateGPSDDraft(
result, sddraft, serviceName, server_type="ARCGIS_SERVER",
connection_file_path=connectionPath, copy_data_to_server=True,
folder_name=None, summary="Analysis Service", tags="gp",
executionType="Synchronous", resultMapServer=False,
showMessages="INFO", maximumRecords=5000, minInstances=2,
maxInstances=3, maxUsageTime=100, maxWaitTime=10,
maxIdleTime=180)
# Analyze the service definition draft
analyzeMessages = arcpy.mapping.AnalyzeForSD(sddraft)
# Stage and upload the service if the sddraft analysis did not
# contain errors
if analyzeMessages['errors'] == {}:
# Execute StageService
arcpy.StageService_server(sddraft, sd)
# Execute UploadServiceDefinition
arcpy.UploadServiceDefinition_server(sd, connectionPath)
else:
# If the sddraft analysis contained errors, display them
print analyzeMessages['errors']
Этот пример демонстрирует создание и публикацию рабочего процесса извлечения данных и проверяет, что данные зарегистрированы на сервере. Задача Извлечь данные (Extract Data) получает входные слои и позволяет пользователю извлечь область интереса, конвертировать в другой тип выходных данных и получить файл архива zip в качестве выходных данных. Для инструмента Извлечь данные (Extract Data) входными данными могут быть только слои. В данном примере создается несколько слоев с помощью инструмента Создать векторный слой (Make Feature Layer), запускается инструмент, создается черновик определения сервиса и передается определение сервиса, которое будет использовано при создании сервиса. Любой слой, созданный в сеансе Python для этого рабочего процесса, будет рассматриваться, как возможные входные данные для итогового сервиса, и будет доступен в качестве варианта выбора.
import os
import arcpy
connPath = "c:/gis/conections/myServer.ags"
sddraft = "c:/gis/gp/drafts/ExtractionDraft.sddraft"
sd = "c:/gis/gp/sd/AnalysisDraft.sd"
serviceName = "DataExtractor"
arcpy.env.workspace = "c:/gis/citydata"
aoi = "c:/gis/citydata/extract.shp"
# Create layers which will be available as input
arcpy.MakeFeatureLayer_management('Wiarton.gdb/places/Cityhall',
'CityHall')
arcpy.MakeFeatureLayer_management('Wiarton.gdb/places/Airport',
'Airport')
arcpy.MakeFeatureLayer_management('Wiarton.gdb/places/FireStations',
'FireStations')
# Run the extract data task and assign it to the 'result' variable
# only the cityhall layer was used as input, but the airport and
# firestation layers will be used in the service creation
result = arcpy.ExtractDataTask_server(
"CityHall", aoi, "File Geodatabase - GDB - .gdb", "ESRI GRID - GRID",
os.path.join(arcpy.env.scratchFolder, "output.zip"))
# Make sure the folder is registered with the server, if not, add
# it to the datastore
if arcpy.env.workspace not in [
i[2] for i in arcpy.ListDataStoreItems(connPath, 'FOLDER')]:
# both the client and server paths are the same
dsStatus = arcpy.AddDataStoreItem(
connPath, "FOLDER", "CityData", arcpy.env.workspace,
arcpy.env.workspace)
print("Data store : {0}".format(dsStatus))
# Create service definition draft
arcpy.CreateGPSDDraft(
result, sddraft, serviceName, server_type="ARCGIS_SERVER",
connection_file_path=connPath, copy_data_to_server=False,
folder_name=None, summary="Extraction Service",
tags="extract data, clip")
# Analyze the service definition draft
analyzeMessages = arcpy.mapping.AnalyzeForSD(sddraft)
# Stage and upload the service if the sddraft analysis did not
# contain errors
if analyzeMessages['errors'] == {}:
# Execute StageService
arcpy.StageService_server(sddraft, sd)
# Execute UploadServiceDefinition
upStatus = arcpy.UploadServiceDefinition_server(sd, connPath)
print("Completed upload")
else:
# If the sddraft analysis contained errors, display them
print(analyzeMessages['errors'])