(Go: >> BACK << -|- >> HOME <<)

A guide to SceneLayers

What are scene layers?

A scene layer is a type of layer that is optimized for displaying large amounts of 3D data in a scene. A scene layer displays the following data types: 3D object ,building, integrated mesh, point, point cloud , or a voxel layer. The scene layer complies with the Indexed 3D Scene layer (I3S) format. The I3S format is an open 3D content delivery format used to disseminate 3D GIS data to mobile, web, and desktop clients.

The specification for Indexed 3D Scene Layers can be accessed on Github.

Visualizing your information in 3D makes it easier to intuitively understand and experience geographic information in a realistic way. Even audiences unfamiliar with GIS can understand complex and detailed data by viewing it in a 3D scene on the web. Being able to capture the three-dimensional nature of objects in the real world allows you to analyze, measure, and query information with more precision.

In the ArcGIS API for JavaScript scene layers have four different classes: SceneLayer, BuildingSceneLayer, PointCloudLayer, IntegratedMeshLayer and VoxelLayer. This distinction is necessary because each layer has a different API. Point scene layer and 3D Object scene layer both expose a feature based API, with very similar functionality. This is why they share the same SceneLayer class.

Below is a table with the corresponding classes and supported functionality in the API:

Type of scene layerAPI classSupports renderersSupports labelingSupports queryingSupports popupsSamples
3D Object scene layerSceneLayeryes (see renderers)nopartially (see Query section of the SceneLayer class)yes (see popupTemplate) 3D-object-sample
Point scene layerSceneLayeryes (see renderers)yes (see labelingInfo)partially (see Query section of the SceneLayer class)yes (see popupTemplate) point-scene-sample
Building scene layerBuildingSceneLayeryes (see renderers)nopartially (see Query section of the BuildingSceneLayer class)yes (see popupTemplate) point-scene-sample
Point cloud scene layerPointCloudLayeryes (see supported
renderers in PointCloudRenderer)
nonono point-cloud-samples
Integrated mesh scene layerIntegratedMeshLayernononono integrated-mesh-sample
Voxel layerVoxelLayernononono voxel-scene-sample

Read more about the types of scene layers at the platform level in the ArcGIS Online and ArcGIS Pro documentation.

The scene layer continuous to evolve and improve performance and usability. You can take advantage of the newest updates by converting your existing SLPKs with the I3S Converter tool:

  • Navigate to the I3S Github repository.
  • Select the I3SConverter folder.
  • Download i3s_converter.exe.
  • After running the converter, a version 1.7 scene layer package is created.
Levels of detail for scene layers

To improve performance scene layers are usually rendered with several levels of detail. At larger scales (close to the ground) all the geometry is loaded and displayed. When zooming out much coarser representations of the geometry with fewer vertices and smaller textures are shown to still have good performance. In addition to that some features are also removed, a process usually referred to as feature thinning.

For point scene layers and point cloud layers feature thinning is applied, so at smaller scales points are removed from display.

Point and 3D Object scene layers

Point and 3D Object scene layers share the same API class: SceneLayer. In this article we write SceneLayer to refer to the Point and 3D Object SceneLayer API class and we write scene layer to refer to the platform level general concept of scene layers.

3D Object scene layers are mainly used for displaying 3D features like buildings and other elements of a city scene. We refer to this type of geometry as a 3D Object. You can use this type of layer for realistic views of a city or for data visualization.

Point scene layers are designed for displaying large amounts of point data, up to millions of points.

city-scene-layer-guide

Publishing

A SceneLayer behaves just like the other layers, they can be styled with renderers, queried for attributes, but they have a more complicated internal logic. Every feature has a set of attributes that can be used to create visualizations or simply display the attributes in a popup for more information.

SceneLayers will have limited access to attributes depending on how they were published. Here is a breakdown on the two workflows for publishing these layers:

SceneLayer with cached attributes only

cached-scene-layer
SceneLayer with associated feature layer

data-connected-scene-layer
Definition - a SceneLayer where attributes are only stored in the cache of the service. The user can configure which attributes will be stored in the cache. See ArcGIS Pro documentation for this configuration. In this case only loaded features have access to the attributes, so it's impossible to make queries on the whole dataset. This type of layer can be used for styling buildings or displaying information about features in the view.Definition - a SceneLayer that besides having cached attributes, it is also connected to a feature layer where the attributes are stored. In this case the attributes configured for the cache will also appear in the associated feature layer. When publishing layers like this, all features have access to all attributes and complex queries on the layer are supported.
Publishing:
  • When uploading a scene layer package to ArcGIS Online or Portal (created with ArcGIS Pro, City Engine or third party software). See documentation for Portal and for ArcGIS Online.
Publishing:
  • In Portal when publishing a scene layer directly from ArcGIS Pro (see documentation).
  • In ArcGIS Online with an Organizational account with a publisher role when publishing a scene layer from a feature layer. (see documentation).
Where do attributes come from?

Renderers, visual variables, popups, labels, filters and queries retrieve attributes either from the cache or from the associated feature layer, depending on how layers are published. The following table summarizes this behavior.

SceneLayer with cached attributes only
SceneLayer with associated feature layer
Renderers / Visual variablesCached attributes are used.If the associated feature layer is editable, then attributes on the associated feature layer are used.* Otherwise, cached attributes are used.
FilterCached attributes are used.If the associated feature layer is editable, then attributes on the associated feature layer are used.* Otherwise, cached attributes are used.
LabelsCached attributes are used.If the associated feature layer is editable, then attributes on the associated feature layer are used.* Otherwise, cached attributes are used.
PopupsCached attributes are displayed.Attributes on the associated feature layer are displayed.
Layer queryNot possible.Layer query gets results from attributes on the associated feature layer.
LayerView queryQuery gets results from cached attributes for currently loaded features.If the associated feature layer is editable, then Query gets results from attributes on the associated feature layer.* Otherwise, cached attributes are used.

* If the layer is edited, the features with edited attributes are rendered with the updated attributes until the number of edited features exceeds 50,000. After that, the edited attributes are not retrieved, and the features are rendered with the cached, outdated attributes. To edit a SceneLayer in ArcGIS API for JavaScript, the associated feature layer should have editing and change tracking enabled.

For details about each of these features, read the description of the SceneLayer class.

Tips and tricks
  • How can I get statistics on attribute values?

You can use the smartMapping summaryStatistics method on the SceneLayer. If the layer doesn't have an associated feature layer, then statistics are only displayed for the features that are loaded in the view.

  • How do I know what functionality my SceneLayer supports?

For each field you can use the getFieldUsageInfo() method to find out whether popups, labels, renderers or queries using that field are supported:

Use dark colors for code blocks
                          
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
sceneLayer.then(function () {
  // get information on whether `OBJECTID` is available for query:
  console.log(sceneLayer.getFieldUsageInfo("OBJECTID"));
  // the result shows that layer queries are not available for this field
  // this means that either the associated feature layer is not available
  // or that the field can't be found in the associated feature layer
  /* Object {
    supportsLabelingInfo: true,
    supportsLayerQuery: false,
    supportsPopupTemplate: true,
    supportsRenderer: true
  }*/

  // query layer for features
  sceneLayer
    .queryFeatures()
    .then(function (result) {
      console.log(result);
    })
    .catch(function (err) {
      console.error(err);
    });
  // querying the layer will result in an error:
  // message: "SceneLayer queries are not available without associated feature layer",
  // name: "scenelayer:query-not-available",
});

Your browser is no longer supported. Please upgrade your browser for the best experience. See our browser deprecation post for more details.