Краткая информация
Класс VectorTileSharingDraft позволяет создавать черновик публикации для векторного слоя листов со связанным векторным веб-слоем. Вы можете настроить объект VectorTileSharingDraft для векторного слоя листов, который копирует все данные или ссылается на зарегистрированные данные в ArcGIS Enterprise 10.8.1 или более поздней версии, или копирует все данные в ArcGIS Online.
Чтобы опубликовать векторный слой листов, кэшированный локально, в Python, используйте инструменты геообработки. Подробнее см. в разделе Публикация веб-слоев с использованием пакетов.
Обсуждение
Чтобы создать объект VectorTileSharingDraft, используйте метод getWebLayerSharingDraft объекта Map и установите параметр service_type на значение VECTOR_TILE. Чтобы указать, копирует ли векторный слой листов все данные или ссылается на зарегистрированные данные в ArcGIS Enterprise, установите для параметра server_type одно из следующих значений:
- HOSTING_SERVER — копирует все данные; включается связанный векторный веб-слой.
- FEDERATED_SERVER— ссылается на зарегистрированные данные; включается связанный слой изображений карты и векторный веб-слой.
Кроме того, параметр layers_and_tables метода getWebLayerSharingDraft является необязательным. Если он используется, то это должен быть список слоев, содержащий по крайней мере один 2D-точечный, линейный или полигональный слой. Используйте функцию listMaps из объекта ArcGISProject и метод listLayers на классе Map, чтобы ссылаться на слой на карте, который вы хотите опубликовать. Если этот параметр не используется, то при публикации объекта VectorTileSharingDraft на карте будут включены все поддерживаемые слои.
Затем объект VectorTileSharingDraft можно будет настроить, задав свойства уровня сервиса. Вы также можете задать свойства объекта VectorTileSharingDraft для связанных с ним векторного веб-слоя и слоя изображений карты. Если для свойства не указано значение, используется значение по умолчанию. Информация о каждом свойстве представлена в списке Свойства ниже.
Примечание:
Если свойства метаданных (credits, description, summary, tags и useLimitations) не заданы или состоят из пустых строк, элемент веб-слоя будет получать метаданные с карты или слоя, в зависимости от того, что опубликовано. Дополнительные сведения о том, как веб-слои являются источником метаданных, см. в разделе Метаданные веб-слоя.
После того как объект VectorTileSharingDraft настроен, он может быть проанализирован на наличие ошибок и предупреждений с помощью дополнительного метода analyzeForSharing, и опубликован с помощью функции Publish. Функция Publish публикует векторный слой листов и все связанные с ним веб-слои либо в ArcGIS Online, либо в ArcGIS Enterprise, и запускает кэширование на сервере.
Примеры кода доступны для следующего:
Свойства
Свойство | Описание | Тип данных |
allowTrueCurvesUpdates (чтение и запись) | Указывает, будет ли разрешено веб-клиентам заменять геометрию истинных кривых объекта уплотненной геометрией. Это свойство поддерживается, только если включено редактирование, а для server_type установлено FEDERATED_SERVER. Значение по умолчанию равно False. Это свойство векторного веб-слоя. | Boolean |
allowUpdateWithoutMValues (чтение и запись) | Указывает, разрешено ли обновление геометрии до объектов с m-значениями без указания этого m-значения. Значение по умолчанию равно True. Это свойство векторного веб-слоя и слоя изображений карты. | Boolean |
approvePublicDataCollection (чтение и запись) | Указывает, будет ли редактирование векторного веб-слоя доступно для всех. Значение по умолчанию равно False. | Boolean |
cache.configuration (чтение и запись) | Путь и имя файла предварительно определенного файла схемы листов .xml, созданного с помощью инструмента Создать схему листов кэша картографического сервиса. | String |
cache.exportTiles (чтение и запись) | Указывает, будет ли клиентам разрешено загружать листы кэша для автономного использования. Значение по умолчанию равно False. | Boolean |
cache.exportTilesCount (чтение и запись) | Максимальное количество листов, которые можно загрузить за один запрос. Это свойство поддерживается, только если для свойства cache.exportTiles задано True. Значение по умолчанию равно 100000. | Integer |
credits (чтение и запись) | Кредиты веб-слоя. | String |
description (чтение и запись) | Описание веб-слоя. | String |
featureCapabilities (чтение и запись) | Включенные возможности, разделенные запятыми. Поддерживаются следующие возможности:
Query, Create, Update, Delete и Editing включены по умолчанию, когда для свойства server_type задано FEDERATED_SERVER. Это свойство векторного веб-слоя и слоя изображений карты. | String |
maxRecordCount (чтение и запись) | Максимальное количество записей, возвращаемых сервером во время запроса. Значением по умолчанию является 2000. Это свойство векторного веб-слоя и слоя изображений карты. | Integer |
onlyAllowTrueCurveUpdatesByTrueCurveClients (чтение и запись) | Указывает, будет ли доступ к обновлению геометрии истинной кривой только у клиентов, которые поддерживают истинные кривые, таких как ArcGIS Pro. Это свойство поддерживается, только если включено редактирование, а для server_type установлено FEDERATED_SERVER. Значение по умолчанию равно False. Это свойство векторного веб-слоя. | Boolean |
portalFolder (чтение и запись) | Имя папки портала, в которой будет опубликован веб-слой. Папкой по умолчанию является корневая папка в Моих ресурсах. | String |
preserveEditUsersAndTimestamps (чтение и запись) | Указывает, будет ли сохраняться информация отслеживания изменений. Значение по умолчанию равно False. Это свойство векторного веб-слоя. | Boolean |
serviceName (чтение и запись) | Имя веб-слоя. Это имя будут видеть пользователи и идентифицировать по нему веб-слой. Имя может содержать только буквы, цифры и знак подчеркивания. В имени нельзя использовать пробелы и специальные символы. Длина имени не должна превышать 120 символов. | String |
sharing.groups (чтение и запись) | Имена групп, разделенные запятыми. | String |
sharing.sharingLevel (чтение и запись) | Определяет уровень доступа веб-слоя.
| String |
summary (чтение и запись) | Краткая информация веб-слоя. | String |
tags (чтение и запись) | Теги веб-слоя. Можно добавить несколько тегов с разделением запятой. | String |
timezone.DaylightSavingTime (чтение и запись) | Указывает, учитывается ли в данном часовом поясе летнее время. Значение по умолчанию равно False. Это свойство векторного веб-слоя и слоя изображений карты. | Boolean |
timezone.ID (чтение и запись) | Часовой пояс, в котором хранятся значения дат. Строковое значение должно соответствовать одному из официальных ID часовых поясов, распознаваемых операционной системой Windows. Список часовых поясов приведен в разделе Часовые пояса в документации Microsoft. Это свойство векторного веб-слоя и слоя изображений карты. | String |
timezone.preferredTimezoneID (чтение и запись) | Часовой пояс, который будет использовать ArcGIS Pro при отображении запросов из векторного веб-слоя. Строковое значение должно соответствовать одному из официальных ID часовых поясов, распознаваемых операционной системой Windows. Список часовых поясов приведен в разделе Часовые пояса в документации Microsoft. Это свойство векторного веб-слоя и слоя изображений карты. | String |
timezone.preferredTimezoneIDDaylightSavingTime (чтение и запись) | Указывает, учитывается ли в предпочтительном часовом поясе летнее время. Значение по умолчанию равно False. Это свойство векторного веб-слоя и слоя изображений карты. | Boolean |
useCIMSymbols (чтение и запись) | Указывает, будут ли использоваться символы Картографической информационной модели Esri (CIM), иначе называемые символами ArcGIS Pro. Установите на False, чтобы использовать символы, которые могут отображаться всеми клиентами. Установите на True, чтобы использовать символы CIM, которые поддерживаются в более новых клиентах, таких как ArcGIS API for JavaScript 4.x. Это свойство работает только в том случае, если включен соответствующий векторный слой, а определение сервиса опубликовано в ArcGIS Online или ArcGIS Enterprise 11.3 или более поздней версии. | Boolean |
useLimitations (чтение и запись) | Ограничения по использованию веб-слоя. | String |
zDefault.enable (чтение и запись) | Указывает, будет ли разрешено редакторам добавлять или обновлять объекты через клиентов, которые не разрешают ввод z-значений. Значение по умолчанию равно True. Это свойство векторного веб-слоя и слоя изображений карты. | Boolean |
zDefault.value (чтение и запись) | Z-значение по умолчанию, которое будет использоваться для заполнения при добавлении или обновлении объектов. Это свойство поддерживается, только если для свойства zDefault.enable задано True. По умолчанию значение равно 0. Это свойство векторного веб-слоя и слоя изображений карты. | Double |
Обзор метода
Метод | Описание |
analyzeForSharing () | Метод analyzeForSharing анализирует объект VectorTileSharingDraft и возвращает ошибки, предупреждения и сообщения. |
Методы
analyzeForSharing ()
Тип данных | Описание |
Dictionary | Словарь ошибок и предупреждений. |
Пример кода
Следующий сценарий создает черновик публикации векторного слоя листов для двух слоев на карте и задает метаданные и свойства папки. Векторный листов публикуется в папке в ArcGIS Online или ArcGIS Enterprise и попадает в общий доступ (для всех). Информация о портале извлекается из функции SignInToPortal.
import arcpy
# Sign in to portal
arcpy.SignInToPortal("https://www.arcgis.com", "MyUserName", "MyPassword")
# Reference layer to publish
aprx = arcpy.mp.ArcGISProject(r"C:\Project\World.aprx")
m = aprx.listMaps('World')[0]
lyrs = []
lyrs.append(m.listLayers('Cities')[0])
lyrs.append(m.listLayers('Counties')[0])
# Create VectorTileSharingDraft and set metadata and portal folder properties
server_type = "HOSTING_SERVER"
service_type = "VECTOR_TILE"
service_name = "VectorTileSharingDraftExample"
vector_draft = m.getWebLayerSharingDraft(server_type, service_type, service_name,
lyrs)
vector_draft.credits = "These are credits"
vector_draft.description = "This is description"
vector_draft.summary = "This is summary"
vector_draft.tags = "tag1, tag2"
vector_draft.useLimitations = "These are use limitations"
vector_draft.portalFolder = "my folder name"
vector_draft.sharing.sharingLevel = "EVERYONE"
vector_draft.sharing.groups = "" # Group names = "group1,group2"
# Share to portal
print("Start Publishing")
res = arcpy.sharing.Publish(vector_draft)
print(r"item_url: " + res["vector_tile_layer"]["item_url"])
print(r"rest_url: " + res["vector_tile_layer"]["rest_url"])
print(r"cache_job_id: " + res["vector_tile_layer"]["cache_job_id"])
print("Finish Publishing")
Следующий сценарий создает черновик публикации векторного слоя листов. Черновик публикации анализируется. Если появится ошибка 00231, хранилище данных будет зарегистрировано с помощью модуля arcgis.gis в ArcGIS API for Python.
import arcpy
# Add a data store item on the portal and register it with a federated server
def register_datastore_item(portal_url, username, password, sde_conn_file,
data_store_name, federated_server_url):
from arcgis.gis import GIS
tags = "tag1, tag2"
description = "Data Store Item created from ArcGIS API for Python"
federated_server_url = federated_server_url.rstrip('/')
federated_server_adminurl = federated_server_url + "/admin"
# Connect to your portal using ArcGIS API for Python
gis = GIS(url=portal_url, username=username, password=password)
# Get federated server ID
server_list = gis.servers["servers"]
fedserver_dict = [srvr for srvr in server_list if srvr["url"] == federated_server_url][0]
fedserver_id = fedserver_dict["id"]
print("Server id: " + fedserver_id)
# Get federated server's DatastoreManager object
fedserver = [srvr for srvr in gis.admin.servers.list() if srvr.url == fedserver_dict["adminUrl"]+"/admin"][0]
fedserver_dsmgr = fedserver.datastores
# Create a connection string from .sde file connection
conn_file = sde_conn_file
conn_string = fedserver_dsmgr.generate_connection_string(conn_file)
print("Connection string generated")
# Create a dictionary for data store configuration
ds_config = {"type": "egdb",
"path": "/enterpriseDatabases/" + data_store_name,
"info": {"isManaged": "false",
"dataStoreConnectionType": "shared",
"connectionString": conn_string}
}
# Create a dictionary for the item properties
item_properties = {"title": data_store_name,
"type": "Data Store",
"tags": tags,
"snippet": description}
# Add the data store item to the portal
ds_item = gis.content.add(item_properties=item_properties,
text=ds_config)
print("Data store item added")
# Get portal data store
portal_ds = gis.datastore
# Validate the data store item, which can be connected before registering
validation_state = portal_ds.validate(server_id=fedserver_id,
item=ds_item)
print("Data store item validated")
# Register the database with the federated server
portal_ds.register(item=ds_item,
server_id=fedserver_id,
bind=False)
print("Data store item registered to server")
return True
if __name__ == "__main__":
portal_url = "https://organization.example.com/webadaptorname"
username = "MyUserName"
password = "MyPassword"
# Sign in to portal
arcpy.SignInToPortal(portal_url, username, password)
# Reference layer to publish
aprx = arcpy.mp.ArcGISProject(r"C:\Project\World.aprx")
m = aprx.listMaps('World')[0]
lyr = m.listLayers('Cities')
# Local variables
server_type = "FEDERATED_SERVER"
service_type = "VECTOR_TILE"
service_name = "VectorTileSharingDraftExample"
sde_conn_file = r"C:\Project\db_conn.sde"
data_store_name = "PortalDSItem"
# Create VectorTileSharingDraft for vector tile layer that references data
# in registered data store and set metadata, portal folder, and server
# folder properties.
vector_draft = m.getWebLayerSharingDraft(server_type, service_type,
service_name, lyr)
vector_draft.credits = "These are credits"
vector_draft.description = "This is description"
vector_draft.summary = "This is summary"
vector_draft.tags = "tag1, tag2"
vector_draft.useLimitations = "These are use limitations"
vector_draft.portalFolder = "my folder name"
vector_draft.serverFolder = "MyServerFolder"
vector_draft.sharing.sharingLevel = "EVERYONE"
vector_draft.sharing.groups = "" # Group names = "group1,group2"
print("Analyzing")
analyze_res = vector_draft.analyzeForSharing()
print(analyze_res)
register_error = [err for err in analyze_res["errors"] if err["code"] == "00231"]
# If data store is not registered
if register_error:
# Register data store
register_res = register_datastore_item(portal_url, username, password,
sde_conn_file, data_store_name,
"https://gisserver.example.com/webadaptorname")
if not register_res:
print("Unable to register the data store, skipping publish")
exit()
# Share to portal
print("Start Publishing")
res = arcpy.sharing.Publish(vector_draft)
print(r"item_url: " + res["vector_tile_layer"]["item_url"])
print(r"rest_url: " + res["vector_tile_layer"]["rest_url"])
print(r"cache_job_id: " + res["vector_tile_layer"]["cache_job_id"])
print("Finish Publishing")
Следующий сценарий создает черновик публикации векторного слоя листов для карты и задает возможности и часовой пояс для связанного векторного веб-слоя. Затем он задает ID элементов для векторного слоя листов и связанных с ним веб-слоев. Векторный слой листов опубликован в ArcGIS Enterprise. Хранилище данных должно быть зарегистрировано на сервере, прежде чем на него можно будет ссылаться.
import arcpy
# Sign in to portal
arcpy.SignInToPortal("https://organization.example.com/webadaptorname",
"MyUserName", "MyPassword")
# Reference map to publish
aprx = arcpy.mp.ArcGISProject(r"C:\Project\World.aprx")
m = aprx.listMaps('World')[0]
# Create VectorTileSharingDraft and set feature capabilities and time zone
# properties
server_type = "FEDERATED_SERVER"
service_type = "VECTOR_TILE"
service_name = "VectorTileSharingDraftExample"
vector_draft = m.getWebLayerSharingDraft(server_type, service_type, service_name)
vector_draft.featureCapabilities = "Query,Create,Update"
vector_draft.timezone.ID = "Pacific Standard Time"
vector_draft.timezone.DaylightSavingTime = True
# Publish vector tile layer using the VectorTileSharingDraft object and specific
# item ID. The ID must be available and contain 32 alphanumeric values ranging
# from letters a to f and numbers 0 to 9.
item_id = {
"vector_tile_layer_id": "itemid1",
"web_feature_layer_id": "itemid2",
"map_image_layer_id": "itemid3"
}
# Share to portal
print("Start Publishing")
res = arcpy.sharing.Publish(vector_draft, item_id)
print(r"item_url: " + res["vector_tile_layer"]["item_url"])
print(r"rest_url: " + res["vector_tile_layer"]["rest_url"])
print(r"cache_job_id: " + res["vector_tile_layer"]["cache_job_id"])
print("Finish Publishing")