Use web scene layers

Scene layers represent large geospatial data in 3D, making it easier for your audience to understand and experience geographic information in a more realistic way. Scene layers are cached layers that are optimized for displaying large amounts of 3D content. Scene layers can include 3D points, point clouds, 3D objects, buildings, integrated meshes, and voxels. The scene layer complies with the Indexed 3D Scene Layer (I3S) specification. Scene layers can be shared to ArcGIS Online and ArcGIS Enterprise as web scene layers. Scene layers can reference many different sources, which are discussed in this topic.

Sources of scene layers
Deployment and data management options for scene layers are shown.

Scene layer package (.slpk)

Scene layer packages are designed to quickly transfer 3D data as a single file. A scene layer package can be viewed in a desktop client such as ArcGIS Pro or ArcGIS Earth or uploaded and published to ArcGIS Online or ArcGIS Enterprise.

You can also publish the .slpk file to ArcGIS Enterprise or ArcGIS Online using the Share Package tool to create a web scene layer. This is the recommended workflow when publishing scene layer packages larger than 500 GB. For scene layer packages smaller than 500 GB, the Portal for ArcGIS home application can be used to upload and publish web scene layers.

Indexed 3D Scene Layer REST (.i3sREST)

The .i3sREST format is based on JSON, REST, and modern web standards. The .i3sREST format is optimized for web clients to handle, parse, and render when stored in cloud stores such as Amazon S3, Azure Blob stores,Alibaba OSS, or Google Cloud. The .i3sREST format is served directly from the data store, allowing improved scalability in ArcGIS Enterprise.

The ready-to-serve .i3sREST format is best suited for scene layer content larger than 200 GB. You can create .i3sREST in ArcGIS Pro. After the scene layer content is available in the cloud store, you can publish it as a scene layer using ArcGIS API for Python to ArcGIS Enterprise 10.8.1 and later.

Extracted scene layer package (.eslpk)

The .eslpk format is a nonarchived folder directory of a scene layer package suitable for file systems. This I3S format can be served using a tile handler designed for handling file extensions. Extracted scene layer packages are for ArcGIS Enterprise.

You can create an extracted scene layer package by using the Extract Package tool. After the scene layer content is available on file system directories or an on-premises Amazon S3 compatible object store such as MinIO, you can publish it as a scene layer using ArcGIS API for Python to ArcGIS Enterprise 10.8.1 and later.

Note:

Scene layer content in .eslpk or .i3sREST formats are not supported in ArcGIS Online.

I3S—Indexed 3D Scene service

In addition to .slpk, .i3sREST, and .eslpk, you can create a scene layer directly in ArcGIS Enterprise or ArcGIS Online by sharing individual web scene layers or web scenes from ArcGIS Pro. 3D point, multipatch, or building layers can be shared with an associated feature layer. This allows additional analysis and editing capabilities that are not possible with web scene layers published from scene layer packages.

Tools that create scene layer content

ArcGIS Pro supports creating scene layer content in various formats in the following geoprocessing tools.

Publish a scene layer using ArcGIS API for Python

Scene layers in .eslpk or .i3sREST formats can be published to ArcGIS Enterprise using ArcGIS API for Python.

Note:

The following are required:

  • Scene content in ready-to-serve format
  • Publisher role privileges in ArcGIS Enterprise

  1. Add the location where scene layer content resides as a data store item to your portal. See Cloud Store items for how to set up a connection string for supported cloud stores.
    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. Register the folder or cloud data store to the desired federated server in the ArcGIS Enterprise portal.
    # 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. 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']

  4. Publish the scene layer content located in the data store.
    ## 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

The scene layer is now published from the cloud store.