VectorTileSharingDraft

Краткая информация

Класс 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
  • Sync
  • Extract
  • Editing

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

Словарь ошибок и предупреждений.

{
'errors': 
[
    {"code":"xxxxx","message":"message string","object":"value such as map or layer name"},
    {"code":"xxxxx","message":"message string","object":"value such as map or layer name"}
], 
'warnings':
[
    {"code":"xxxxx","message":"message string","object":"value such as map or layer name"},
    {"code":"xxxxx","message":"message string","object":"value such as map or layer name"}
]
}

Пример кода

Опубликовать векторный слой листов, который копирует все данные в папку портала

Следующий сценарий создает черновик публикации векторного слоя листов для двух слоев на карте и задает метаданные и свойства папки. Векторный листов публикуется в папке в 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 элементов

Следующий сценарий создает черновик публикации векторного слоя листов для карты и задает возможности и часовой пояс для связанного векторного веб-слоя. Затем он задает 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")

Связанные разделы