使用场景图层

什么是场景图层?

场景图层是一种针对在场景中显示大量 3D 数据而优化的图层类型。场景图层显示以下数据类型:3D 对象、建筑物、集成格网、点、点云或体元图层。场景图层符合索引 3D 场景图层 (I3S) 格式。I3S 格式是一种开放式 3D 内容交付格式,移动、Web 和桌面客户端都支持。

I3S规范可以在 Github 上访问。

以 3D 形式可视化您的信息可以轻松且直观地理解和以逼真的方式体验地理信息。即使是不熟悉 GIS 的观众也可以通过在 Web 3D 场景中查看复杂而详细的数据来理解这些数据。能够捕捉现实世界中对象的 3D 特性,可以让您更精确地分析、测量和查询信息。

在 GeoScene API for JavaScript 中,场景图层有五个不同的类: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

在 GeoScene Online 和 GeoScene Pro 文档中阅读有关平台级别场景图层类型的详细信息。

场景图层不断发展并提高了性能和可用性。您可以通过使用 I3S 转换器工具转换现有 SLPK 来利用最新功能:

  • 导航到 I3S I3S Github 库
  • 选择 I3SConverter 文件夹。
  • 下载 i3s_converter.exe
  • 运行转换器后,将创建一个 1.7 版的场景图层包。

场景图层的细节层次

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

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

点和 3D 对象场景图层

点和 3D 对象场景图层共享相同的 API 类:SceneLayer

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

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

city-scene-layer-guide

发布

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

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

仅具有缓存属性的 SceneLayer

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

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

属性从何而来?

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

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

*如果图层已编辑,具有已编辑属性的要素将使用更新的属性进行渲染。直到已编辑要素的数量超过 50,000后,不会检索已编辑的属性,而是使用缓存的属性呈现要素。要在 GeoScene API 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 () {
  //获取有关 `OBJECTID` 是否可用于查询的信息:
  console.log(sceneLayer.getFieldUsageInfo("OBJECTID"));
  // 结果显示图层查询不适用于该字段
  // 这意味着关联的要素图层不可用
  // 或者在关联的要素图层中找不到该字段
  /* Object {
    supportsLabelingInfo: true,
    supportsLayerQuery: false,
    supportsPopupTemplate: true,
    supportsRenderer: true
  }*/

  // 要素查询图层
  sceneLayer
    .queryFeatures()
    .then(function (result) {
      console.log(result);
    })
    .catch(function (err) {
      console.error(err);
    });
  // 查询图层会报错:
  // 消息:“如果没有关联的要素图层,SceneLayer 查询不可用”,
  // 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.