SceneLayerSharingDraft

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

Класс SceneLayerSharingDraft позволяет создавать черновик публикации для слоя веб-сцены со связанным векторным веб-слоем. Вы можете настроить объект SceneLayerSharingDraft для слоя веб-сцены, который копирует все данные или ссылается на зарегистрированные данные в ArcGIS Enterprise, или копирует все данные в ArcGIS Online.

Объект может публиковать следующие типы слоев сцены:

  • Точка
  • 3D-объект
  • Здание

Чтобы опубликовать слой веб-сцены, кэшированный локально, в Python, используйте инструменты геообработки. Подробнее см. в разделе Публикация веб-слоев с использованием пакетов.

Обсуждение

Чтобы создать объект SceneLayerSharingDraft, используйте метод getWebLayerSharingDraft объекта Map и установите параметр service_type на значение SCENE_LAYER. Чтобы указать, копирует ли слой веб-сцены все данные или ссылается на зарегистрированные данные в ArcGIS Enterprise, установите для параметра server_type одно из следующих значений:

  • HOSTING_SERVER — копирует все данные; включается связанный векторный веб-слой.
  • FEDERATED_SERVER— ссылается на зарегистрированные данные; включается связанный слой изображений карты и векторный веб-слой.

Кроме того, параметр layers_and_tables в методе getWebLayerSharingDraft должен быть списком с единым слоем. Используйте функцию listMaps из объекта ArcGISProject и метод listLayers на классе Map, чтобы ссылаться на слой в 3D-сцене, который вы хотите опубликовать.

Затем объект SceneLayerSharingDraft можно будет настроить, задав свойства уровня сервиса. Вы также можете задать свойства объекта SceneLayerSharingDraft для связанных с ним векторного веб-слоя и слоя изображений карты. Если для свойства не указано значение, используется значение по умолчанию. Информация о каждом свойстве представлена в списке Свойства ниже.

Примечание:

Если свойства метаданных (credits, description, summary, tags и useLimitations) не заданы или состоят из пустых строк, элемент веб-слоя будет получать метаданные со слоя сцены в проекте ArcGIS Pro, в зависимости от того, что опубликовано. Дополнительные сведения о том, как веб-слои являются источником метаданных, см. в разделе Метаданные веб-слоя.

После того как объект SceneLayerSharingDraft настроен, он может быть проанализирован на наличие ошибок и предупреждений с помощью дополнительного метода analyzeForSharing, и опубликован с помощью функции Publish. Функция Publish публикует слой веб-сцены и все связанные с ним веб-слои либо в ArcGIS Online, либо в ArcGIS Enterprise, и запускает кэширование на сервере.

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

Свойства

СвойствоОписаниеТип данных
allowUpdateWithoutMValues
(чтение и запись)

Указывает, будет ли разрешено обновление геометрии до объектов с m-значениями без указания этого m-значения. Значение по умолчанию равно True.

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

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

Указывает, будет ли редактирование векторного веб-слоя доступно для всех.

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

Список полей слоя, которые будут включены в кэш слоя веб-сцены.

List
compressedTextures
(чтение и запись)

Указывает, будет ли включена опция по оптимизации текстур, которая поддерживает более быстрое отображение в приложениях 3D. Это свойство поддерживается при совместном публикации мультипатч-слоя или векторного слоя 3D-объектов.

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

Кредиты веб-слоя.

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

Описание веб-слоя.

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

Указывает могут ли пользователи экспортировать веб-слой в другие форматы.

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

Включенные возможности, разделенные запятыми. Поддерживаются следующие возможности:

  • Query
  • Create
  • Update
  • Delete
  • Sync
  • Extract
  • Editing

Query, Create, Update, Delete и Editing включены по умолчанию, когда для свойства server_type задано FEDERATED_SERVER.

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

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

Максимальное количество записей, возвращаемых сервером во время запроса. Значением по умолчанию является 2000.

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

Integer
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
useLimitations
(чтение и запись)

Ограничения по использованию веб-слоя.

String
zDefault.enable
(чтение и запись)

Указывает, будет ли разрешено редакторам добавлять или обновлять объекты через клиентов, которые не разрешают ввод z-значений. Значение по умолчанию равно True.

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

Boolean
zDefault.value
(чтение и запись)

Z-значение по умолчанию, которое будет использоваться для заполнения при добавлении или обновлении объектов. Это свойство поддерживается, только если для свойства zDefault.enable задано True. По умолчанию значение равно 0.

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

Double

Обзор метода

МетодОписание
analyzeForSharing ()

Метод analyzeForSharing анализирует объект SceneLayerSharingDraft и возвращает ошибки, предупреждения и сообщения.

Методы

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]
lyr = m.listLayers('Cities')

# Create SceneLayerSharingDraft and set metadata and portal folder properties
server_type = "HOSTING_SERVER"
service_type = "SCENE_LAYER"
service_name = "SceneLayerSharingDraftExample"
scene_draft = m.getWebLayerSharingDraft(server_type, service_type, service_name, lyr)
scene_draft.credits = "These are credits"
scene_draft.description = "This is description"
scene_draft.summary = "This is summary"
scene_draft.tags = "tag1, tag2"
scene_draft.useLimitations = "These are use limitations"
scene_draft.portalFolder = "my folder name"
scene_draft.sharing.sharingLevel = "EVERYONE"
scene_draft.sharing.groups = ""  # Group names = "group1,group2"

# Share to portal
print("Start Publishing")
res = arcpy.sharing.Publish(scene_draft)

print(r"item_url: " + res["web_scene_layer"]["item_url"])
print(r"rest_url: " + res["web_scene_layer"]["rest_url"])
print(r"cache_job_id: " + res["web_scene_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 can be connected to 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 = "SCENE_LAYER"
    service_name = "SceneLayerSharingDraftExample"
    sde_conn_file = r"C:\Project\db_conn.sde"
    data_store_name = "PortalDSItem"

    # Create SceneLayerSharingDraft for scene layer that references data in registered data store and set metadata, portal folder, and server folder properties
    scene_draft = m.getWebLayerSharingDraft(server_type, service_type, service_name, lyr)
    scene_draft.credits = "These are credits"
    scene_draft.description = "This is description"
    scene_draft.summary = "This is summary"
    scene_draft.tags = "tag1, tag2"
    scene_draft.useLimitations = "These are use limitations"
    scene_draft.portalFolder = "my folder name"
    scene_draft.serverFolder = "MyServerFolder"
    scene_draft.sharing.sharingLevel = "EVERYONE"
    scene_draft.sharing.groups = ""  # Group names = "group1,group2"

    print("Analyzing")
    analyze_res = scene_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(scene_draft)

    print(r"item_url: " + res["web_scene_layer"]["item_url"])
    print(r"rest_url: " + res["web_scene_layer"]["rest_url"])
    print(r"cache_job_id: " + res["web_scene_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 layer to publish
aprx = arcpy.mp.ArcGISProject(r"C:\Project\World.aprx")
m = aprx.listMaps('World')[0]
lyr = m.listLayers('Cities')

# Create SceneLayerSharingDraft and set feature capabilities, time zone, and cached attributes properties
server_type = "HOSTING_SERVER"
service_type = "SCENE_LAYER"
service_name = "SceneLayerSharingDraftExample"
scene_draft = m.getWebLayerSharingDraft(server_type, service_type, service_name, lyr)
scene_draft.featureCapabilities = "Query,Create,Update"
scene_draft.timezone.ID = "Pacific Standard Time"
scene_draft.timezone.DaylightSavingTime = True
scene_draft.cachedAttributes = ["field1", "field2"]

# Publish scene layer using the SceneLayerSharingDraft 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 = {
 "web_scene_layer_id": "itemid1",
 "web_feature_layer_id": "itemid2",
 "map_image_layer_id": "itemid3"
}

# Share to portal
print("Start Publishing")
res = arcpy.sharing.Publish(scene_draft, item_id)

print(r"item_url: " + res["web_scene_layer"]["item_url"])
print(r"rest_url: " + res["web_scene_layer"]["rest_url"])
print(r"cache_job_id: " + res["web_scene_layer"]["cache_job_id"])
print("Finish Publishing")

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