场景图层指南

什么是场景图层?

场景图层是一种经过优化的,用于在场景中显示大量 3D 数据的图层。场景图层显示以下数据类型:3D 对象、建筑物、集成式网格、点、点云或体素图层。场景图层符合索引 3D 场景图层 (I3S) 格式。I3S 格式是一种开放的 3D 内容传送格式,用于向移动、web 和桌面客户端传播 3D GIS 数据。

通过在 3D 模式下显示信息更易于以一种真实的方式直观地理解和体验地理信息。即使是不熟悉 GIS 的受众,也可以通过在 Web 上的 3D 场景中查看复杂和详细的数据来理解它们。能够捕获现实世界中对象的三维本质,可以让您更精确地分析、测量和查询信息。

在 GeoScene Maps SDK for JavaScript 中,场景图层有 5 中不同的类:SceneLayerBuildingSceneLayerPointCloudLayerIntegratedMeshLayerVoxelLayer。这种区分是必要的,因为每一图层都有不同的 API。点场景图层和 3D 对象场景图层都公开了一个基于要素的 API,其具有非常相似的功能。这就是为什么它们共享同一 SceneLayer 类

下表列出了 API 中相应类和支持的功能:

场景图层的类型API 类支持渲染器支持标注支持查询支持弹出窗口示例
3D 对象场景图层SceneLayer是 (请参阅 renderers)部分 (请参阅 SceneLayer 类的查询部分)是 (请参阅 popupTemplate) 3D-object-sample
点场景图层SceneLayer是 (请参阅 renderers)是 (请参阅 labelingInfo)部分 (请参阅 SceneLayer 类的查询部分)是 (请参阅 popupTemplate) point-scene-sample
建筑场景图层BuildingSceneLayer是 (请参阅 renderers)部分 (请参阅 BuildingSceneLayer 类的查询部分)是 (请参阅 popupTemplate) point-scene-sample
点云场景图层PointCloudLayer是 (请参阅 PointCloudRenderer 中支持的
渲染器)
point-cloud-samples
集成格网场景图层IntegratedMeshLayer integrated-mesh-sample
体素图层VoxelLayer voxel-scene-sample

场景图层的细节层次

为了提高性能,场景图层通常使用多个细节层次进行渲染。在大比例下 (接近地面),将加载并显示所有几何。当缩小至具有更少折点和更小纹理的几何粗糙表示时,仍然具有良好的性能。除此之外,还移除了一些要素,此过程通常被称为要素稀疏化。

对于点场景图层和点云图层,应用了要素稀疏化,因此在较小比例下,点会从显示中移除。

点和 3D 对象场景图层

点和 3D 对象场景图层共享同一 API 类:SceneLayer。在本文中,我们编写了 SceneLayer 来引用点和 3D 对象 SceneLayer API 类,并编写了 scene layer 来引用场景图层的平台级一般概念。

3D 对象场景图层主要用于显示 3D 要素,如建筑物和城市场景中的其他元素。我们将这种类型的几何称为 3D 对象。您可使用此图层类型来实现城市的逼真视图或数据可视化。

点场景图层旨在显示大量的点数据,最多可显示数百万个点。

city-scene-layer-guide

发布

SceneLayer 的行为与其他图层一样,可以使用渲染器设置样式、查询属性,但它们具有更复杂的内部逻辑。每个要素都有一组属性,可用于创建可视化效果,或仅在弹出窗口中显示属性以获取更多信息。

SceneLayers 对属性的访问会受到限制,具体取决于其发布方式。以下是发布这些图层的两个工作流程的详细信息:

仅具有缓存属性的 SceneLayer

cached-scene-layer
具有关联要素图层的 SceneLayer

data-connected-scene-layer
定义 - 一个 SceneLayer,其中属性仅存储在服务缓存中。用户可以配置将哪些属性存储在缓存中。 在这种情况下,只有加载的要素可以访问属性,因此不能对整个数据集进行查询。这种类型的图层可用于样式化建筑物或显示视图中有关要素的信息。定义 - 一个 SceneLayer,除了具有缓存属性外,它还连接到存储属性的要素图层。在这种情况下,为缓存配置的属性也将出现在关联要素图层中。以此方式发布图层时,所有要素都可访问所有属性,并且支持图层上的复杂查询。
发布
  • 将场景图层包上传到 GeoScene Online 或 Portal (使用 GeoScene Pro、CityEngine 或第三方软件创建) 时。
发布
  • 在 Portal 中,可直接从 GeoScene Pro 发布场景图层
  • 在 GeoScene Online 中,当从要素图层发布场景图层时,需使用具有发布者角色的组织帐户。

属性从何而来?

渲染器、视觉变量、弹出窗口、标注、过滤器和查询可从缓存或关联要素图层中检索属性,具体取决于图层的发布方式。下表总结了此行为。

仅具有缓存属性的 SceneLayer
具有关联要素图层的 SceneLayer
渲染器 / 视觉变量使用缓存的属性。如果关系要素图层是可编辑的,则使用关联要素图层上的属性。*否则,将使用缓存的属性。
过滤器使用缓存的属性。如果关系要素图层是可编辑的,则使用关联要素图层上的属性。*否则,将使用缓存的属性。
标注使用缓存的属性。如果关系要素图层是可编辑的,则使用关联要素图层上的属性。*否则,将使用缓存的属性。
弹出窗口显示缓存的属性。显示关联要素图层上的属性。
图层查询不支持。图层查询从关联要素图层上的属性中获取结果。
LayerView 查询查询从当前加载要素的缓存属性中获取结果。如果关联要素图层是可编辑的,则查询会从关联要素图层的属性中获取结果。*否则,将使用缓存的属性。

* 如果编辑图层,则具有已编辑属性的要素将使用更新的属性进行渲染,直到已编辑要素的数量超过 50,000。之后,将不检索已编辑的属性,并使用缓存的过时属性来渲染要素。要在 GeoScene Maps SDK for JavaScript 中编辑 SceneLayer,关联要素图层应启用编辑和更改追踪功能。

有关这些要素的详细信息,请阅读 SceneLayer 类的描述。

提示和技巧

  • 如何获取属性值的统计信息?

您可在 SceneLayer 上使用 smartMapping summaryStatistics 方法。如果图层没有关联要素图层,则仅显示视图中加载的要素的统计数据。

  • 如何知道 SceneLayer 支持哪些功能?

对于每个字段,您可以使用 getFieldUsageInfo() 方法来确定是否支持使用该字段的弹出窗口、标注、渲染器或查询:

代码块使用深色复制
                          
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",
}); 

您的浏览器不再受支持。请升级您的浏览器以获得最佳体验。