Skip to main content

analyzeForSharing

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

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

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

Синтаксис

analyzeForSharing()

Свойства

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

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

  • SharedTemplateEditing

  • Append

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

Примечание:

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

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

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

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

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

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

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

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

Dictionary

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

{
'errors':
[
    {"code":"xxxxx","message":"message string","object":"value such as layer name"},
    {"code":"xxxxx","message":"message string","object":"value such as layer name"}
],
'warnings':
[
    {"code":"xxxxx","message":"message string","object":"value such as layer name"},
    {"code":"xxxxx","message":"message string","object":"value such as 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]
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 = "FEDERATED_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")