地形
地形用于表达地球上高低起伏的状态,地形数据则是具体的实现方式。
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 类。
| 名称 | 描述 |
|---|---|
CesiumTerrainProvider | Cesium 自带的地形服务提供者,一般用来加载 Cesium ion 里的资源和自定义地形 |
EllipsoidTerrainProvider | 默认椭球,不带任何高程信息 |
GoogleEarthEnterpriseTerrainProvider | Google Earth Enterprise 地形服务提供,国内无法使用者 |
ArcGISTiledElevationTerrainProvider | ArcGIS ImageService 地形服务提供者 |
VRTheWorldTerrainProvider | VT 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();