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, и запускает кэширование на сервере.
Приведенные ниже примеры кода доступны для следующих задач:
Опубликовать слой веб-сцены, который копирует все данные в папку портала
Опубликовать слой веб-сцены, который ссылается на зарегистрированные данные
Задать возможности связанного векторного веб-слоя и ID элементов
Синтаксис
analyzeForSharing()
Свойства
| Имя | Объяснение | Тип данных |
|---|---|---|
|
allowUpdateWithoutMValues (Чтение / Запись) |
Указывает, будет ли разрешено обновление геометрии до объектов с m-значениями без указания этого m-значения. Значение по умолчанию равно Это свойство векторного веб-слоя и слоя изображений карты. |
Boolean |
|
approvePublicDataCollection (Чтение / Запись) |
Указывает, будет ли редактирование векторного веб-слоя доступно для всех. |
Boolean |
|
cachedAttributes (Чтение / Запись) |
Список полей слоя, которые будут включены в кэш слоя веб-сцены. |
List |
|
compressedTextures (Чтение / Запись) |
Указывает, будет ли включена опция по оптимизации текстур, которая поддерживает более быстрое отображение в приложениях 3D. Это свойство поддерживается при совместном публикации мультипатч-слоя или векторного слоя 3D-объектов. |
Boolean |
|
credits (Чтение / Запись) |
Кредиты веб-слоя. |
String |
|
description (Чтение / Запись) |
Описание веб-слоя. |
String |
|
export (Чтение / Запись) |
Указывает могут ли пользователи экспортировать веб-слой в другие форматы. |
Boolean |
|
featureCapabilities (Чтение / Запись) |
Включенные возможности, разделенные запятыми. Поддерживаются следующие возможности:
Это свойство векторного веб-слоя и слоя изображений карты. |
String |
|
maxRecordCount (Чтение / Запись) |
Максимальное количество записей, возвращаемых сервером во время запроса. Значением по умолчанию является 2000. Это свойство векторного веб-слоя и слоя изображений карты. |
Integer |
|
portalFolder (Чтение / Запись) |
Имя папки портала, в которой будет опубликован веб-слой. Папкой по умолчанию является корневая папка в Моих ресурсах. |
String |
|
preserveEditUsersAndTimestamps (Чтение / Запись) |
Указывает, будет ли сохраняться информация отслеживания изменений. Значение по умолчанию равно Это свойство векторного веб-слоя. |
Boolean |
|
serviceName (Чтение / Запись) |
Имя веб-слоя. Это имя будут видеть пользователи и идентифицировать по нему веб-слой. Имя может содержать только буквы, цифры и знак подчеркивания. В имени нельзя использовать пробелы и специальные символы. Длина имени не должна превышать 120 символов. |
String |
|
sharing.groups (Чтение / Запись) |
Имена групп, разделенные запятыми. |
String |
|
sharing.sharingLevel (Чтение / Запись) |
Определяет уровень доступа веб-слоя.
|
String |
|
summary (Чтение / Запись) |
Краткая информация веб-слоя. |
String |
|
tags (Чтение / Запись) |
Теги веб-слоя. Можно добавить несколько тегов, разделенных запятыми. |
String |
|
timezone.DaylightSavingTime (Чтение / Запись) |
Указывает, учитывается ли в данном часовом поясе летнее время. Значение по умолчанию равно Это свойство векторного веб-слоя и слоя изображений карты. |
Boolean |
|
timezone.ID (Чтение / Запись) |
Часовой пояс, в котором будут храниться значения дат. Строковое значение должно соответствовать одному из официальных ID часовых поясов, распознаваемых операционной системой Windows. Список часовых поясов приведен в разделе Часовые пояса в документации Microsoft. Примечание:Эта настройка применяется в следующем сценарии:
Это свойство векторного веб-слоя и слоя изображений карты. |
String |
|
timezone.preferredTimezoneID (Чтение / Запись) |
Часовой пояс, который будет использовать ArcGIS Pro при отображении запросов из векторного веб-слоя. Строковое значение должно соответствовать одному из официальных ID часовых поясов, распознаваемых операционной системой Windows. Список часовых поясов приведен в разделе Часовые пояса в документации Microsoft. Это свойство векторного веб-слоя и слоя изображений карты. |
String |
|
timezone.preferredTimezoneIDDaylightSavingTime (Чтение / Запись) |
Указывает, учитывается ли в предпочтительном часовом поясе летнее время. Значение по умолчанию равно Это свойство векторного веб-слоя и слоя изображений карты. |
Boolean |
|
useLimitations (Чтение / Запись) |
Ограничения по использованию веб-слоя. |
String |
|
zDefault.enable (Чтение / Запись) |
Указывает, будет ли разрешено редакторам добавлять или обновлять объекты через клиентов, которые не разрешают ввод z-значений. Значение по умолчанию равно Это свойство векторного веб-слоя и слоя изображений карты. |
Boolean |
|
zDefault.value (Чтение / Запись) |
Z-значение по умолчанию, которое будет использоваться для заполнения при добавлении или обновлении объектов. Это свойство поддерживается, только если для свойства Это свойство векторного веб-слоя и слоя изображений карты. |
Double |
Методы
analyzeForSharing()
Метод analyzeForSharing анализирует объект SceneLayerSharingDraft и возвращает ошибки и предупреждения.
Возвращаемое значение
| Тип данных | Объяснение |
|---|---|
|
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 элементов для слоя веб-сцены и связанных с ним веб-слоев. Слой веб-сцены публикуется в 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")