Краткая информация
Класс 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 и 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 элементов для слоя веб-сцены и связанных с ним веб-слоев. Слой веб-сцены публикуется в 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")