Публикация больших объёмов 3D контента в ArcGIS Enterprise в виде слоя веб-сцены

В ArcGIS всё чаще используются 3D слои сцены, такие как интегрированный мешоблако точек3D-объекты или здания. Объём данных может варьироваться от данных с небольшого залёта беспилотника над строительной площадкой до 3D данных на город, район, область, всю страну или Мир. ArcGIS предоставляет различные рабочие процессы для создания 3D веб слоёв.

ArcGIS предоставляет различные рабочие процессы для оптимизации создания трехмерных веб-слоев. И выбор зависит от доступных версий ArcGIS, необходимых функций, например запросы, а так же форматах и объёмах данных.

В ArcGIS Enterprise рекомендуемый рабочий процесс заключается в создании слоёв сцены (i3s), ссылающихся на 3D-контент. Необходимо различать кэшированные 3D-слои и 3D-слои, сохраняющие связь с исходными данными. Кэшированные 3D-слои, могут представлять из себя пакет слоя сцены (.slpk) или пакет 3D-тайлов (.3tz).

Слой веб-сцены со связанным векторным слоем

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

Начиная с ArcGIS Enterprise 10.5, можно публиковать объекты мультипатч в качестве слоя 3D-объектов сцены, а слой точечных объектов — в качестве слоя точечной сцены. Если требуется слой веб-сцены здания, то понадобится ArcGIS Enterprise 10.7 или более поздней версии. Если планируете работать со слоем 3D-объектов сцены и связанным с ним векторным слоем 3D-объектов, то понадобится ArcGIS Enterprise 11.2 и более поздние версии.

Распакованный 3D кэш

Наборы данных кэша сцены (.eslpk или .i3sREST) являются эффективным способом публикации больших объёмов 3Д данных. Готовые к использованию данные могут храниться в файловой системе как ESLPK или в хранилище объектов как I3SREST. I3SREST и ESLPK были представлены в версии 10.8.1. Esri рекомендует использовать распакованный формат 3D тайлов (I3SREST и ESLPK), если объем данных превышает 500 ГБ.

Для извлечения пакетов слоев сцены в ESLPK\I3SREST можно использовать конвертер i3s или инструмент Распаковать в ArcGIS Pro 2.9 и более поздних версиях. Эти инструменты создают контент, готовый для непосредственного использования в ArcGIS Enterprise в качестве источника для сервисов слоёв веб-сцены, в формате, наиболее подходящем для целевого хранилища данных.
В качестве целевого хранилища данных можно выбрать хранение в файловой системе (папки) или хранилище объектов, расположенного в облаке, например Amazon S3, Azure Blob storage, Alibaba OSS, бакеты Google Cloud. Выбранное местоположение должно быть зарегистрировано в ArcGIS Enterprise как хранилище данных, управляемое пользователем

Хранение в папках файловой системы — формат ESLPK

Esri рекомендует размещать директории с ESLPK на SSD дисках для обеспечения высокоскоростного доступа к контенту. Такие файловые хранилища данных смогут обеспечивать высокую производительность при большом количество запросов к слоям веб-сцен.
Используйте код ниже либо инструмент Распаковать в ArcGIS Pro 2.9+, чтобы извлечь содержимое из файла .slpk версии 1.6+ в формат для файловой системы eslpk:

i3s_converter.exe --extract C:\path_to_folder\sample.slpk -d \\unc\path_to_my_data_store

Хранение в облачном хранилище — формат I3SREST

Esri рекомендует использовать облачные хранилища данных в тех случаях, когда в дополнение к неограниченному пространству для хранения требуется защита данных, резервное копирование и отказоустойчивость.
Используйте код ниже либо инструмент Распаковать в ArcGIS Pro 2.9+, чтобы обновить и извлечь содержимое из файла .slpk версии 1.6+ в формат i3sREST, готовый к использованию в облачном хранилище данных:

i3s_converter.exe --convert C:\path_to_folder\sample2.slpk -d s3://mySlpkBucket -a MY_ACCESS_KEY -s MY_SECRET_KEY -r us-east-1a

Для получения дополнительной информации об использовании i3sconverter, пожалуйста, перейдите по ссылке.

Публикация слоя веб-сцены из управляемого пользователем хранилища 3D кэша (I3SREST и ESLPK)

Слои веб-сцены, основывающиеся на извлечённом кэше, можно опубликовать с помощью ArcGIS Pro или скрипта на Python.
При появлении нового содержимого слой веб-сцены можно обновить воспользовавшись опцией Замена веб-слоя сцены в ArcGIS Pro или через Заменить слой сцены в веб-интерфейсе ArcGIS Enterprise.

Публикация в ArcGIS Pro

Инструменты ArcGIS Pro позволяют опубликовать слои веб-сцен, которые ссылаются на набор данных кэша сцены (.eslpk или .i3sREST), начиная с версии ArcGIS Pro 3.2 и ArcGIS Enterprise 11.0 и более поздних версий.
Для этого нужно распаковать .slpk, способами описанными выше и зарегистрировать папку или облачное хранилище на сервере, интегрированным с порталом. После чего на панели Каталог щелкните правой кнопкой на извлеченный пакет слоев сцены (.eslpk) в папке или ресурсы слоя сцены (.i3sREST) в облачном хранилище и выберите Опубликовать как веб-слой.
В моём случае использую файловое хранилище. Результат распаковки файла .slpk в формат .eslpk в проводнике Windows выглядит следующим образом:

Затем регистрирую хранилище:

И публикую веб-слой сцены:


В результате получаю рабочий веб-слой сцены с размером в 1 KB, т.к. он ссылается на распакованный кэш:

Более детально процесс публикации описан в разделе документации ArcGIS Pro Публикация слоя веб-сцены из набора данных кэша

Публикация с помощью ArcGIS API for Python

Для публикации используется ArcGIS API for Python 1.8.2 и выше и Jupyter Notebook.
В блоге Esri приведен код, который можно использовать для публикации. Ниже приведём его копию.

Step 1. Add the location where scene layer content resides, as a data store item to your portal.

import json
from arcgis.gis import GIS

# Connect to your GIS
# Create a connection to your portal for publishing
gis=GIS(url="https://my_portal_name/portal", username="my_username", password="my_pwd")

# Step 1a.  Create a user managed data store item configuration for file system with scene content
# path to the folder with eslpk or i3srest content 
ds_config = {"type": "folder",
             "path": "/fileShares/name_of_datastores",
             "info":{"isManaged": False,
              "dataStoreConnectionType": "shared",
              "path": "\\\\unc_path\\folder_with_extracted_scene_content"}
             }
txt = json.dumps(ds_config)

# Step1b. 
# Add data store as an item to my portal
ds_item = gis.content.add(
            {
            'title' : "title_for_my_folder_data_store",
            'type' : "Data Store",# must be this
            'tags' : "Scene content",
            'text' : txt
            })
ds_item

Step 2. Register the folder or cloud data store to the desired federated server in the ArcGIS Enterprise portal. Here is the link to ArcGIS Enterprise portal experience for it.

# Step 2:  Register the data store item to a server federated to ArcGIS Enterprise
# The server can be either Hosting or Federated server

server_list = gis.admin.federation.servers
server_list

server_id = None
for server in server_list['servers']:
    if server['serverRole'] == 'HOSTING_SERVER':
        server_id = server['id']
        break
if server_id is None:
    raise Exception("Cannot find HOSTING SERVER on this Enterprise configuration")

server_id
gis.datastore.register(item=ds_item, server_id=server_id)

Step 3:  List the contents of the data store to select the folder with the desired scene layer content.

## Step 3. List the contents of my data store item 
ds = gis.datastore
desc = ds.describe(item=ds_item.id, server_id=server_id, path='/', store_type='datastore').result()
cache_store_id = desc['definition']['datastoreId']

Step 4: Publish the scene layer content located in the data store managed by you, as a scene layer.

## Step 4a. Create a dictionary for your service configuration
service_conf= {
  "type": "SceneServer",
  "serviceName": "name_of_scene",
  "properties": {
    "pathInCachedStore" : "/myscene_content.eslpk",
    "cacheStoreId": cache_store_id,
  }
}
service_conf

## Step 4b. Publish the scene layer content 
##          located in data store managed by you as a scene layer

ds.publish(config=service_conf, server_id=server_id, folder="/",
                 description="pointsceneLayer by python API", 
                 tags="pythonAPI test").result()

## My scene layer is published and now is serving content directly from my data store 


Добавить комментарий