地形服务是Cesium的亮点之一,通过加入地形可以形象的展示出地球表面的特征和地貌,在Cesium中,可以使用TerrainProvider类的子类来加载地形数据,通过把某个子类实例化的TerrainProvider赋值给Viewer.terrainProvider来实现地形数据的显示。
这里要注意的是,项目中一般只有一种地形数据,terrainProvider不支持多个地形数据叠加。
CesiumTerrainProvider是Cesium默认的地形提供者,在使用前,我们需要去cesium官网申请一个Ion的accessToken,具体可以查看这篇文章。
1.第一种,cesium默认的地形服务,这里需要设置cesium token
Cesium.Ion.defaultAccessToken = '你的access token';
viewer = new Cesium.Viewer('cesiumContainer',{
fullscreenButton: false,//是否显示全屏按钮
})
//开启地形
viewer.terrainProvider = Cesium.createWorldTerrain();
2.加载自行发布的地形数据,这里就不需要设置token了
这里我们首先要准备项目所需的地形数据,可以去地理空间数据云 (gscloud.cn)下载相应的DEM高程数据
下载后得到dem,即是我们所需的高程数据。
然后可以通过cesiumlab工具进行地形切片
切片后得到如下的切片文件:
这里我们将切片文件放到本地项目目录dem下,或者直接放到服务器上访问即可,这里因为我本地在vs code起了服务,所有可以在本地直接访问。
viewer.terrainProvider = new Cesium.CesiumTerrainProvider({
url: './dem/',
requestVertexNormals: true
})
地形加载效果如下图所示: