场景图层指南
什么是场景图层?
场景图层是一种经过优化的,用于在场景中显示大量 3D 数据的图层。场景图层显示以下数据类型:3D 对象、建筑物、集成式网格、点、点云或体素图层。场景图层符合索引 3D 场景图层 (I3S) 格式。I3S 格式是一种开放的 3D 内容传送格式,用于向移动、web 和桌面客户端传播 3D GIS 数据。
通过在 3D 模式下显示信息更易于以一种真实的方式直观地理解和体验地理信息。即使是不熟悉 GIS 的受众,也可以通过在 Web 上的 3D 场景中查看复杂和详细的数据来理解它们。能够捕获现实世界中对象的三维本质,可以让您更精确地分析、测量和查询信息。
在 GeoScene Maps SDK for JavaScript 中,场景图层有 5 中不同的类:SceneLayer、BuildingSceneLayer、PointCloudLayer、IntegratedMeshLayer 和 VoxelLayer。这种区分是必要的,因为每一图层都有不同的 API。点场景图层和 3D 对象场景图层都公开了一个基于要素的 API,其具有非常相似的功能。这就是为什么它们共享同一 SceneLayer 类。
下表列出了 API 中相应类和支持的功能:
场景图层的类型 | API 类 | 支持渲染器 | 支持标注 | 支持查询 | 支持弹出窗口 | 示例 |
---|---|---|---|---|---|---|
3D 对象场景图层 | SceneLayer | 是 (请参阅 renderers) | 否 | 部分 (请参阅 SceneLayer 类的查询部分) | 是 (请参阅 popupTemplate) | |
点场景图层 | SceneLayer | 是 (请参阅 renderers) | 是 (请参阅 labelingInfo) | 部分 (请参阅 SceneLayer 类的查询部分) | 是 (请参阅 popupTemplate) | |
建筑场景图层 | BuildingSceneLayer | 是 (请参阅 renderers) | 否 | 部分 (请参阅 BuildingSceneLayer 类的查询部分) | 是 (请参阅 popupTemplate) | |
点云场景图层 | PointCloudLayer | 是 (请参阅 PointCloudRenderer 中支持的 渲染器) | 否 | 否 | 否 | |
集成格网场景图层 | IntegratedMeshLayer | 否 | 否 | 否 | 否 | |
体素图层 | VoxelLayer | 否 | 否 | 否 | 否 |
场景图层的细节层次
为了提高性能,场景图层通常使用多个细节层次进行渲染。在大比例下 (接近地面),将加载并显示所有几何。当缩小至具有更少折点和更小纹理的几何粗糙表示时,仍然具有良好的性能。除此之外,还移除了一些要素,此过程通常被称为要素稀疏化。
对于点场景图层和点云图层,应用了要素稀疏化,因此在较小比例下,点会从显示中移除。
点和 3D 对象场景图层
点和 3D 对象场景图层共享同一 API 类:SceneLayer。在本文中,我们编写了 Scene
来引用点和 3D 对象 SceneLayer API 类,并编写了 scene layer
来引用场景图层的平台级一般概念。
3D 对象场景图层主要用于显示 3D 要素,如建筑物和城市场景中的其他元素。我们将这种类型的几何称为 3D 对象。您可使用此图层类型来实现城市的逼真视图或数据可视化。
点场景图层旨在显示大量的点数据,最多可显示数百万个点。
发布
SceneLayer 的行为与其他图层一样,可以使用渲染器设置样式、查询属性,但它们具有更复杂的内部逻辑。每个要素都有一组属性,可用于创建可视化效果,或仅在弹出窗口中显示属性以获取更多信息。
SceneLayers 对属性的访问会受到限制,具体取决于其发布方式。以下是发布这些图层的两个工作流程的详细信息:
定义 - 一个 SceneLayer,其中属性仅存储在服务缓存中。用户可以配置将哪些属性存储在缓存中。 在这种情况下,只有加载的要素可以访问属性,因此不能对整个数据集进行查询。这种类型的图层可用于样式化建筑物或显示视图中有关要素的信息。 | 定义 - 一个 SceneLayer,除了具有缓存属性外,它还连接到存储属性的要素图层。在这种情况下,为缓存配置的属性也将出现在关联要素图层中。以此方式发布图层时,所有要素都可访问所有属性,并且支持图层上的复杂查询。 |
发布:
| 发布:
|
属性从何而来?
渲染器、视觉变量、弹出窗口、标注、过滤器和查询可从缓存或关联要素图层中检索属性,具体取决于图层的发布方式。下表总结了此行为。
渲染器 / 视觉变量 | 使用缓存的属性。 | 如果关系要素图层是可编辑的,则使用关联要素图层上的属性。*否则,将使用缓存的属性。 |
过滤器 | 使用缓存的属性。 | 如果关系要素图层是可编辑的,则使用关联要素图层上的属性。*否则,将使用缓存的属性。 |
标注 | 使用缓存的属性。 | 如果关系要素图层是可编辑的,则使用关联要素图层上的属性。*否则,将使用缓存的属性。 |
弹出窗口 | 显示缓存的属性。 | 显示关联要素图层上的属性。 |
图层查询 | 不支持。 | 图层查询从关联要素图层上的属性中获取结果。 |
LayerView 查询 | 查询从当前加载要素的缓存属性中获取结果。 | 如果关联要素图层是可编辑的,则查询会从关联要素图层的属性中获取结果。*否则,将使用缓存的属性。 |
* 如果编辑图层,则具有已编辑属性的要素将使用更新的属性进行渲染,直到已编辑要素的数量超过 50,000。之后,将不检索已编辑的属性,并使用缓存的过时属性来渲染要素。要在 GeoScene Maps SDK for JavaScript 中编辑 SceneLayer,关联要素图层应启用编辑和更改追踪功能。
有关这些要素的详细信息,请阅读 SceneLayer 类的描述。
提示和技巧
- 如何获取属性值的统计信息?
您可在 SceneLayer 上使用 smartMapping summaryStatistics 方法。如果图层没有关联要素图层,则仅显示视图中加载的要素的统计数据。
- 如何知道 SceneLayer 支持哪些功能?
对于每个字段,您可以使用 getFieldUsageInfo() 方法来确定是否支持使用该字段的弹出窗口、标注、渲染器或查询: