Skip to main content

analyzeForSharing

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

Класс 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, и запускает кэширование на сервере.

Примеры кода доступны для следующего:

Синтаксис

analyzeForSharing()

Свойства

Имя Объяснение Тип данных

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

  • SharedTemplateEditing

  • Append

  • 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.

Примечание:

Эта настройка применяется в следующем сценарии:

  • В ваших данных есть поля отслеживания изменений, настроенные на запись дат в базе данных.

  • Вы публикуете данные с полями дат в ArcGIS Enterprise 11.5 и более ранней версии.

  • Вы публикуете данные в ArcGIS Online или ArcGIS Enterprise 12.0 и более поздней версии, а в свойствах слоя не определен часовой пояс.

Это свойство векторного веб-слоя и слоя изображений карты.

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 и возвращает ошибки, предупреждения и сообщения.

Возвращаемое значение

Тип данных Объяснение

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")