MapServiceDraft

Сводка

Класс MapServiceDraft позволяет настроить свойства картографического сервиса и создать черновой файл определения сервиса (.sddraft) , который затем может быть опубликован на ArcGIS Server.

Описание

Чтобы создать объект MapServiceDraft, с помощью функции arcpy.sharing.CreateSharingDraft установите для параметра параметр server_type значение STANDALONE_SERVER, а для параметра service_type - значение MAP_SERVICE. Затем объект MapServiceDraft можно будет настроить, задав свойства уровня сервиса . С помощью свойства targetServer укажите сервер, на котором будет опубликован этот картографический сервис. Когда объект MapServiceDraft будет настроен, его можно будет сохранить в черновой файл определения сервиса (.sddraft) с помощью функции exportToSDDraft. Затем он может быть опубликован на ArcGIS Server с помощью инструментов Промежуточный сервис и Загрузить определение сервиса. Дополнительные сведения см. в разделе Введение в arcpy.sharing.

Как только файл .sddraft будет установлен и загружен на сервер, можно использовать инструменты в группе инструментов Кэширование, чтобы создавать и управлять картографическим кэшем для более быстрого отображения картографических сервисов, например, инструментом Управление листами кэша картографического сервиса. Схему разделения на тайлы также можно изменить, редактируя файл .sddraft с помощью XML-библиотек, таких как xml.dom.minidom. Однако, из-за сложной структуры XML-схемы разбиения на листы, рекомендуется всегда использовать группу инструментов Кэширование.

Свойства

ВладениеОбъяснениеТип данных
copyDataToServer
(чтение и запись)

Устанавливает, будут ли данные карты скопированы на сервер. Если значение равно True, то будут скопированы все данные на карте, в том числе данные, которые зарегистрированы на сервере. Если значение равно False, то будут скопированы только данные, которые не зарегистрированы на сервере, а сервис будет использовать данные, которые зарегистрированы на сервере.

Boolean
credits
(чтение и запись)

Кредиты черновика картографического сервиса.

String
description
(чтение и запись)

Описание черновика картографического сервиса.

String
offline
(чтение и запись)

Устанавливает, будет ли использоваться подключение сервера. Если указано False, необходимо указать URL сервера или файл подключения ArcGIS Server (.ags) для свойства targetServer, чтобы создать файл черновик определения сервиса (.sddraft) с помощью функции exportToSDDraft. Если установлено значение True, то файл черновика определения сервиса может быть создан без заполнения параметра targetServer.

Boolean
overwriteExistingService
(чтение и запись)

Определяет, будут ли перезаписываться имеющиеся сервисы с одинаковыми именами.

Boolean
serverFolder
(чтение и запись)

Имя папки сервера, в которой вы хотели бы опубликовать этот сервис. По умолчанию будет использоваться корневой каталог сервера. Этот каталог будет создан, если его еще нет.

String
serverType
(только чтение)

Тип сервера, который был указан при создании MapServiceDraft из функции CreateSharingDraft. Единственно возможное значение, которое возвращается из serverType для MapServiceDraftSTANDALONE_SERVER. serverType из STANDALONE_SERVER говорит о поддержке создания картографического сервиса для ArcGIS Server.

String
serviceName
(чтение и запись)

Имя картографического сервиса. Это то имя, которое будут видеть другие пользователи и использовать для обозначения этого сервиса. Имя может содержать только буквы, цифры и знак подчеркивания. В имени нельзя использовать пробелы и специальные символы. Длина имени не должна превышать 120 символов.

String
summary
(чтение и запись)

Описание черновика картографического сервиса.

String
tags
(чтение и запись)

Теги черновика картографического сервиса. Теги могут быть разделены запятыми или точками с запятой.

String
targetServer
(чтение и запись)

Сервер, на котором будет опубликована эта карта. Для указания сервера могут использоваться следующие форматы:

  • Полный путь к файлу подключения ArcGIS Server (.ags).
  • URL ArcGIS Server. Воспользуйтесь этой опцией, если у вас есть подключение публикатора или администратора к ArcGIS Server в проекте ArcGIS Pro и вы открываете проект в скрипте или запустив скрипт в ArcGIS Pro.

Более подробно см. в разделе Подключение к ГИС-серверу.

Подсказка:

targetServer также может использоваться в параметре in_server для инструмента Выгрузить определение сервиса. Примеры кода ниже демонстрируют это.

String
useLimitations
(чтение и запись)

Ограничения по использованию черновика картографического сервиса.

String

Обзор метода

МетодОбъяснение
exportToSDDraft (out_sddraft)

Конвертирует MapServiceDraft в файл черновика определения сервиса (.sddraft).

Методы

exportToSDDraft (out_sddraft)
ParameterОбъяснениеТип данных
out_sddraft

Путь и имя файла для выходного файла черновика определения сервиса (.sddraft).

String

После настройки MapServiceDraft его можно сохранить в качестве файла черновика определения сервиса (.sddraft). Затем он может быть опубликован в ArcGIS Server с помощью инструментов Промежуточный сервис и Загрузить определение сервиса.

Пример кода

Пример MapServiceDraft

Следующий скрипт публикует карту в проекте ArcGIS Pro как картографический сервис на ArcGIS Server.

import arcpy
import os

# Set output file names
outdir = r"C:\Project\Output"
service = "MapServiceDraftExample"
sddraft_filename = service + ".sddraft"
sddraft_output_filename = os.path.join(outdir, sddraft_filename)

# Reference map to publish
aprx = arcpy.mp.ArcGISProject(r"C:\Project\World.aprx")
m = aprx.listMaps("World")[0]

# Create MapServiceDraft and set service properties
service_draft = arcpy.sharing.CreateSharingDraft("STANDALONE_SERVER", "MAP_SERVICE", service, m)
service_draft.targetServer = r"C:\Project\gisserver.ags.esri.com (publisher).ags"

# Create Service Definition Draft file
service_draft.exportToSDDraft(sddraft_output_filename)

# Stage Service
sd_filename = service + ".sd"
sd_output_filename = os.path.join(outdir, sd_filename)
arcpy.StageService_server(sddraft_output_filename, sd_output_filename)

# Publish to server
print("Uploading Service Definition...")
arcpy.UploadServiceDefinition_server(sd_output_filename, "https://gisserver.esri.com:6443/arcgis/")

print("Successfully Uploaded service.")
Пример изменения SDDraft

Следующий скрипт создает для карты черновик файла определения сервиса (.sddraft) для карты. Затем он разрешит доступ к объекту в картографическом сервисе, изменив черновик файла определения сервиса с помощью стандартной библиотеки Python xml.dom.minidom. Затем измененный файл определения сервиса будет опубликован в ArcGIS Server. Наконец, скрипт вызывает инструмент Управление листами кэша картографического сервера для построения листов кэша картографического сервиса.

import arcpy, os, sys
import xml.dom.minidom as DOM

arcpy.env.overwriteOutput = True

# Update these variables
serviceName = "ModifySDDraftExample"
tempPath = r"C:\Project\Output"
path2APRX = r"C:\Project\World.aprx"
# Make sure this server url is added as publisher ags connection to the project
# Else use the ags connection file itself
targetServer = "https://gisserver.esri.com:6443/arcgis/"

# All paths are built by joining names to the tempPath
SDdraftPath = os.path.join(tempPath, "tempdraft.sddraft")
newSDdraftPath = os.path.join(tempPath, "updatedDraft.sddraft")
SDPath = os.path.join(tempPath, serviceName + ".sd")

aprx = arcpy.mp.ArcGISProject(path2APRX)
m = aprx.listMaps('World')[0]

# Create MapServiceDraft and set service properties
sddraft = arcpy.sharing.CreateSharingDraft('STANDALONE_SERVER', 'MAP_SERVICE', serviceName, m)
sddraft.targetServer = targetServer
sddraft.copyDataToServer = False
sddraft.exportToSDDraft(SDdraftPath)

# Read the contents of the original SDDraft into an xml parser
doc = DOM.parse(SDdraftPath)

# The following code modifies the SDDraft from a new MapService with caching capabilities
# to a FeatureService with Map, Create and Query capabilities.
typeNames = doc.getElementsByTagName('TypeName')
for typeName in typeNames:
    if typeName.firstChild.data == "FeatureServer":
        extention = typeName.parentNode
        for extElement in extention.childNodes:
            if extElement.tagName == 'Enabled':
                extElement.firstChild.data = 'true'

# Turn off caching
configProps = doc.getElementsByTagName('ConfigurationProperties')[0]
propArray = configProps.firstChild
propSets = propArray.childNodes
for propSet in propSets:
    keyValues = propSet.childNodes
    for keyValue in keyValues:
        if keyValue.tagName == 'Key':
            if keyValue.firstChild.data == "isCached":
                keyValue.nextSibling.firstChild.data = "false"

# Turn on feature access capabilities
configProps = doc.getElementsByTagName('Info')[0]
propArray = configProps.firstChild
propSets = propArray.childNodes
for propSet in propSets:
    keyValues = propSet.childNodes
    for keyValue in keyValues:
        if keyValue.tagName == 'Key':
            if keyValue.firstChild.data == "WebCapabilities":
                keyValue.nextSibling.firstChild.data = "Map,Query,Data"
                
# Modify keep cache, false by default
configProps = doc.getElementsByTagName('KeepExistingMapCache')[0]
configProps.firstChild.data = "true"
                
# Write the new draft to disk
f = open(newSDdraftPath, 'w')
doc.writexml(f)
f.close()

try:
    # Stage the service
    arcpy.StageService_server(newSDdraftPath, SDPath)
    warnings = arcpy.GetMessages(1)
    print(warnings)
    print("Staged service")

    # Upload the service
    arcpy.UploadServiceDefinition_server(SDPath, server_con)
    print("Uploaded service")

    # Manage Map server Cache Tiles
    # For cache, use multiple scales seperated by semicolon (;) 
    # For example "591657527.591555;295828763.795777" 
    arcpy.server.ManageMapServerCacheTiles(targetServer + os.sep + serviceName + ".MapServer", "591657527.591555",
    "RECREATE_ALL_TILES")
    
except Exception as stage_exception:
    print("Analyzer errors encountered - {}".format(str(stage_exception)))

except arcpy.ExecuteError:
    print(arcpy.GetMessages(2))