cesium.js入门基础教程三 (地形)

发布时间 2023-12-14 10:37:30作者: 奥托

地形简介

Cesium默认是不包含地形的,准确的说应该是Cesium默认加载的地形是没有起伏效果的,如下图所示,在包含山脉的地区是看不到地形起伏的:

默认使用的地形为 "WGS84 Ellipsoid":

地形提供者 TerrainProvider

与影像类似,在Cesium中包含了一些地形提供者TerrainProvider用于加载各类地形,举例如下,具体情况可参阅官方文档:

  • ArcGISTiledElevationTerrainProvider:由ArcGIS提供的地形服务;
  • CesiumTerrainProvider:由Cesium官方提供的地形服务;
  • CustomHeightmapTerrainProvider:自定义高程的地形服务;
  • EllipsoidTerrainProvider:高程为 0 的地形服务,如果初始化时不指定地形,那么默认的就是使用的该地形服务;
  • GoogleEarthEnterpriseTerrainProvider:由GoogleEarth提供的地形服务;
  • VRTheWorldTerrainProvider:由VRTheWorld提供的地形服务。

加载地形的方法

与加载影像图层十分类似,加载地形的方法也有两种:

  • 在初始化viewer的时候添加;
  • 通过viewer.terrainProvider赋值添加

注意,一个视图下只能加载一个地形
而影像图层是可以加载多个的,同一视图下可以叠加多个影像;
另外,从语义上来说,每一个影像图层都是一个imageryLayer,所有的imageryLayer都是通过ImageryLayerCollection来管理,添加一个影像图层用的方法是addImageryProvider,注意add
而对于地形来说,是直接给viewer.terrainProvider赋值的

初始化Viewer时添加地形

在初始化Viewer时在第二个参数Viewer.ConstructorOptions中添加terrainProvider属性并提供一个TerrainProvider对象:

const viewer = new Cesium.Viewer("cesiumContainer", {
  terrainProvider: new Cesium.ArcGISTiledElevationTerrainProvider({
    url: 'https://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer',
  })
})

通过viewer.terrainProvider赋值添加

通过viewer.terrainProvider赋值添加的代码如下:

const viewer = new Cesium.Viewer("cesiumContainer")
const ArcGisTerrainProvider = new Cesium.ArcGISTiledElevationTerrainProvider({
  url: 'https://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer',
})
viewer.terrainProvider = ArcGisTerrainProvider

地形提供者示例

与影像类似,在Cesium中提供了一些地形提供者TerrainProvider用于加载各类地形

  • ArcGISTiledElevationTerrainProvider:由ArcGIS提供的地形服务;
  • CesiumTerrainProvider:由Cesium官方提供的地形服务;
  • CustomHeightmapTerrainProvider:自定义高程的地形服务;
  • EllipsoidTerrainProvider:高程为 0 的地形服务,如果初始化时不指定地形,那么默认的就是使用的该地形服务;
  • GoogleEarthEnterpriseTerrainProvider:由GoogleEarth提供的地形服务;
  • VRTheWorldTerrainProvider:由VRTheWorld提供的地形服务。