使用 Web 场景图层

场景图层在 3D 模式下表示大型地理空间数据,让您的受众更容易以更真实的方式理解和体验地理信息。 场景图层是经过优化的缓存图层,可用于显示大量 3D 内容。 场景图层可包括 3D 点、点云、3D 对象、建筑物、集成网格和体素。 场景图层符合索引 3D 场景图层 (I3S) 规格。 场景图层可以作为 web 场景图层共享ArcGIS OnlineArcGIS Enterprise。 场景图层可以引用本主题中讨论的许多不同来源。

场景图层的来源
显示场景图层的部署和数据管理选项。

场景图层包 (.slpk)

场景图层包旨在将 3D 数据作为单个文件快速传输。 场景图层包可以在桌面客户端(例如 AllSourceArcGIS Earth)中进行查看,或上传并发布到 ArcGIS OnlineArcGIS Enterprise

您还可以使用共享包工具将 .slpk 文件发布到 ArcGIS EnterpriseArcGIS Online 来创建 web 场景图层。 这是发布大于 500 GB 的场景图层包时推荐的工作流。 对于小于 500 GB 的场景图层包,可以使用 Portal for ArcGIS 主页应用程序上传和发布 web 场景图层。

索引 3D 场景图层 REST (.i3sREST)

.i3sREST 格式基于 JSON、REST 和现代 Web 标准。 .i3sREST 格式针对 Web 客户端进行了优化,以便在存储在云存储(如 Amazon S3Azure Blob 存储、Alibaba OSSGoogle Cloud)中时处理、解析和渲染。 .i3sREST 格式将直接从数据存储进行提供,从而改进 ArcGIS Enterprise 中的可伸缩性。

即用型 .i3sREST 格式最适合大于 200 GB 的场景图层内容。 您可在 AllSource 中创建 .i3sREST。 在云存储中提供场景图层内容后,您可以使用 ArcGIS API for Python 将其作为场景图层发布到 ArcGIS Enterprise 10.8.1 和更高版本。

已提取的场景图层包 (.eslpk)

.eslpk 格式为适用于文件系统的场景图层包的非归档文件夹目录。 可以使用专为处理文件扩展名而设计的切片处理程序来提供这种 I3S 格式。 已提取的场景图层包适用于 ArcGIS Enterprise

您可以通过使用“提取包”工具创建已提取的场景图层包。 当场景图层内容在文件系统目录或本地 Amazon S3 兼容对象存储(例如 MinIO)上可用后,您可以使用 ArcGIS API for Python 将其作为场景图层发布到 ArcGIS Enterprise 10.8.1 和更高版本。

注:

ArcGIS Online 不支持 .eslpk.i3sREST 格式的场景图层内容。

I3S - 索引 3D 场景服务

除了 .slpk.i3sREST.eslpk 之外,您还可以通过共享单个 web 场景图层或 web 场景,在 ArcGIS EnterpriseArcGIS Online 中直接从 AllSource 创建场景图层。3D 点、多面体或建筑图层可以与关联的要素图层共享。 这允许使用从场景图层包发布的 web 场景图层无法实现的其他分析和编辑功能。

创建场景图层内容的工具

AllSource 支持在以下地理处理工具中以各种格式创建场景图层内容。

使用 ArcGIS API for Python 发布场景图层

.eslpk.i3sREST 格式的场景图层可以使用 ArcGIS API for Python 发布到 ArcGIS Enterprise

注:

以下程序是必需的:

  • 即用型格式的场景内容
  • ArcGIS Enterprise 中的发布者角色权限

  1. 将场景图层内容所在的位置作为数据存储项目添加到您的门户。 有关如何为支持的云存储设置连接字符串,请参阅云存储项目
    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 AWS cloud store with scene content
    # path to the i3srest content 
    ds_config = {"provider": "amazon",
                 "type": "cloudStore",
                 "path": "/cloudStores/mys3",
                 "info": {"isManaged": False,
                 "connectionString": "{\"credentialType\":\"accesskey\",\"accessKeyId\":\"MY_ACCESS_KEY\",
                  \"secretAccessKey\":\"MY_SECRET_ACCESS_KEY\",\"region\":\"us-west-1\",
                  \"defaultEndpointsProtocol\":\"https\"}", "objectStore": "MY_AWS_BUCKET"}} 
    txt = json.dumps(ds_config)
    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

  2. 将文件夹或云数据存储注册到 ArcGIS Enterprise 门户中所需的联合服务器。
    # 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)

  3. 列出数据存储的内容以选择具有所需场景图层内容的文件夹。
    ## 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']

  4. 发布位于数据存储中的场景图层内容。
    ## Step 4a. Create a dictionary for your service configuration
    service_conf= {
      "type": "SceneServer",
      "serviceName": "name_of_scene_layer",
      "properties": {
        "pathInCachedStore" : "/myscene_content.i3srest",
        "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

场景图层现已从云存储发布。