主题
场景图层指南
字数统计: 2.4k 字
阅读时长: 约 5 分钟
当前版本: 4.29
什么是场景图层?
场景图层是一种经过优化的,用于显示大量 3D 数据的图层。场景图层支持以下数据类型:3D 对象、建筑物、集成式网格、点、点云或体素图层。场景图层符合索引 3D 场景图层 (I3S) 格式。I3S 格式是一种开放的 3D 内容传输格式,支持在移动、web 和桌面客户端展示。
在 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 | 否 | 否 | 否 | 是 (请参阅 popupEnabled) |
场景图层的细节层次
为了提高性能,场景图层通常使用多个细节层次进行渲染。在大比例下 (接近地面),加载并显示所有几何。在小比例尺下,可以缩小至具有更少折点和更小纹理的几何粗糙表示,这样仍然具有良好的性能。除此之外,还移除了一些要素,此过程通常被称为要素抽稀处理。
对于点场景图层和点云图层,应用了要素稀疏化,因此在较小比例下,点会从显示中移除。
点和 3D 对象场景图层
点和 3D 对象场景图层共用同一 API 类:SceneLayer。
3D 对象场景图层主要用于显示 3D 要素,如建筑物和城市场景中的其他元素。这种类型的几何称为 3D 对象。此图层类型用来实现城市的逼真视图或数据可视化。 点场景图层支持显示大量的点数据,最多可显示数百万个点。

发布
与其他图层一样,SceneLayer 也可以通过渲染器设置样式、查询属性,但它们具有更复杂的内部逻辑。每个要素也都有一组属性,可用于创建可视化效果,或在弹出窗口中显示属性以获取更多信息。
SceneLayers 发布方式不同,对属性的访问会受到限制。以下是发布这些图层的两个工作流程的详细信息:
仅具有缓存属性的 SceneLayer | 关联要素图层的 SceneLayer |
---|---|
定义 - 仅属性存储在服务缓存中。用户可以配置将哪些属性存储在缓存中。在这种情况下,只有已加载的要素可以访问属性,因此不能对整个数据集进行查询。这种类型的图层可用于样式化建筑物或显示视图内要素的信息。 | 定义 - 一个 SceneLayer,其还连接到一个要素图层。通过关联要素图层,将实时应用对场景图层的编辑,并支持有限数量的编辑,直到需要重建缓存为止。此概念允许访问单个要素,同时受益于通过场景图层优化的显示。为缓存配置的 3D 对象要素的属性和网格几何也可通过关联的要素图层直接获得。以此方式发布图层时,所有要素都可访问所有属性,并且支持图层上的复杂查询。 |
发布:将场景图层包上传到 GeoScene Online 或 Portal (使用 GeoScene Pro或第三方软件创建) 时。 | 发布:直接从 GeoScene Pro 发布到portal的场景图层。在 GeoScene Online 中,当从要素图层发布场景图层时,需使用具有发布者角色的组织帐户。 |
发布:GeoScene Online (beta) 中可编辑的编辑格网几何 (模型上传) 场景图层
要使用场景图层编辑功能 (在测试版中发布) 上传、更新和删除 3D 对象,需要通过以下方式发布服务。
使用最新的 GeoScene Pro 4.1 准备数据:
在文件地理数据库中创建 3D 对象要素类
添加存储格式 GLB (Khronos Group glTF binary),该格式支持在 web 上上传模型
a. 打开
Analysis
>Tools
b. 搜索并打开Add 3D Formats to multipatch
c. 添加.glb
并运行该工具创建仅包含新 3D 对象要素类的文件地理数据库的 zip 文件
使用您的组织在 GeoScene Online 上发布数据:
上传
.zip
文件并作为要素图层发布从已发布的要素图层发布场景图层
根据工作流,在要素图层上启用编辑功能
属性从何而来?
渲染器、视觉变量、弹出窗口、标注、过滤器和查询可从缓存或关联要素图层中检索属性,具体取决于图层的发布方式。下表总结了各种情况。
仅具有缓存属性的 SceneLayer | 具有关联要素图层的 SceneLayer | |
---|---|---|
渲染器 / 视觉变量 | 使用缓存的属性。 | 如果关系要素图层是可编辑的,则使用关联要素图层的属性。*否则,将使用缓存的属性。 |
过滤器 | 使用缓存的属性。 | 如果关系要素图层是可编辑的,则使用关联要素图层的属性。*否则,将使用缓存的属性。 |
标注 | 使用缓存的属性。 | 如果关系要素图层是可编辑的,则使用关联要素图层的属性。*否则,将使用缓存的属性。 |
弹出窗口 | 显示缓存的属性。 | 显示关联要素图层的属性。 |
图层查询 | 不支持。 | 图层查询从关联要素图层的属性中获取结果。 |
LayerView 查询 | 查询从当前加载要素的缓存属性中获取结果。 | 如果关联要素图层是可编辑的,则查询会从关联要素图层的属性中获取结果。*否则,将使用缓存的属性。 |
* 编辑图层,图层会根据最新属性进行渲染,编辑要去个数不能超过 50,000。加载后,将会使用缓存的过时属性来渲染要素。要在 GeoScene Maps SDK for JavaScript 中编辑 SceneLayer,关联的要素图层需要启用编辑和更改追踪功能。
有关更多详细信息,请阅读 SceneLayer 类的描述。
提示和技巧
- 如何对属性值统计?
您可在 SceneLayer 上使用 smartMapping summaryStatistics 方法。如果图层没有关联要素图层,则仅显示视图中加载的要素的统计数据。
- 如何知道 SceneLayer 支持哪些功能?
每个字段都可以使用 getFieldUsageInfo() 方法来确定是否支持使用该字段配置弹出窗口、标注、渲染器或查询:
js
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",
});