Skip to content

地形

地形用于表达地球上高低起伏的状态,地形数据则是具体的实现方式。

Cesium 中的地形类是 Terrain,每一个 Terrain 关联了一个 terrainProvider 我们称之为地形提供者或地形服务提供者,其类型为 TerrainProvider。这是因为地形数据可能多种多样,TerrainProvider 用于解析具体的数据,而 Terrain 则用于屏蔽这些差异,提供统一的控制接口。

TIP

Cesium 目前只支持设置一个地形,所以如果您的地形数据有多个,需要先合并成一个,才能同时添加显示。

加载地形

为场景添加地形主要有两种方式

  • 通过 Viewer 类的 terrainProvider 构造参数添加
ts
const viewer = new Viewer({
  terrainProvider: new CesiumTerrainProvider(),
});
  • 通过 Viewer 实例的 terrainProvider 属性赋值
ts
const viewer = new Cesium.Viewer("cesiumContainer");
viewer.terrainProvider = new CesiumTerrainProvider();

地形服务提供者

Cesium 为我们提供了 5 个地形服务提供者,他们都继承自 TerrainProvider 类。

名称描述
CesiumTerrainProviderCesium 自带的地形服务提供者,一般用来加载 Cesium ion 里的资源和自定义地形
EllipsoidTerrainProvider默认椭球,不带任何高程信息
GoogleEarthEnterpriseTerrainProviderGoogle Earth Enterprise 地形服务提供,国内无法使用者
ArcGISTiledElevationTerrainProviderArcGIS ImageService 地形服务提供者
VRTheWorldTerrainProviderVT MÄK VR-TheWorld server` 地形服务提供者
ts
// 加载Cesium ion资源
Cesium.CesiumTerrainProvider.fromIonAssetId(3956, {
  requestVertexNormals: true,
}).then((result) => {
  viewer.terrainProvider = result;
});

// 加载自定义地形
Cesium.CesiumTerrainProvider.fromUrl(
  "https://data.marsgis.cn/terrain",
  {}
).then((result) => {
  viewer.terrainProvider = result;
});

// 加载Arcgis地形
Cesium.ArcGISTiledElevationTerrainProvider.fromUrl(
  "https://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer",
  {
    token: "XXXX.XXXX",
  }
).then((result) => {
  viewer.terrainProvider = result;
});

// 重置默认椭球地形
viewer.terrainProvider = new EllipsoidTerrainProvider();

MGis 地理三维库