地形数据是描述地球表面和地形高度的数字模型或图像。在三维可视化应用中,地形数据通常用于创建真实感强的地形表面,以便用户可以更好地了解地球表面的特征和地貌。 在Cesium中,可以使用TerrainProvider类的子类来加载地形数据,通过把某个子类实例化的TerrainProvider赋值给Viewer.terrainProvider来实现地形数据的显示
TerrainProvider类是Cesium中用于加载地形数据的基本类。它定义了一组接口,用于请求和获取地形高度数据以及其他地形信息
Cesium中的TerrainProvider有多个子类,每个子类都支持不同类型的地形数据源和/或渲染技术。Cesium中常见的TerrainProvider子类主要有下面几种:
在Cesium中常用的TerrainProvider子类主要是CesiumTerrainProvider类
CesiumTerrainProvider使用STK World Terrain数据源加载高程数据,支持地形纹理贴图。数据源提供全球30米分辨率的高程数据和地表覆盖材料图层。CesiumTerrainProvider支持动态地形数据获取、卸载和缓存,并可以在运行时更改LOD级别和地形贴图。CesiumTerrainProvider适用于需要高精度和高性能地形渲染的应用程序
url
:加载地形数据的URL地址。requestVertexNormals
:布尔类型,表示是否请求顶点法线信息requestWaterMask
:一个布尔类型,表示是否请求水面遮罩信息hasVertexNormals
:只读布尔值,表示该地形提供器是否包含顶点法线信息hasWaterMask
:只读布尔值,表示该地形提供器是否包含水面遮罩信息errorEvent
:Event类型,当地形数据请求错误时触发availability
:定义地形数据可用性的TimeIntervalCollection对象requestTileGeometry(x, y, level, request)
:请求给定坐标和级别的地形几何数据。该方法返回Promise对象,可以在其完成时获得地形几何数据getLevelMaximumGeometricError(level)
:获取指定级别的最大地形几何误差getTileDataAvailable(x, y, level)
:查询给定坐标和级别的地形数据是否可用CustomHeightmapTerrainProvider继承自HeightmapTerrainProvider类,因此具有HeightmapTerrainProvider的所有功能,如同步和异步请求高程瓦片、获取最大几何误差等。此外,CustomHeightmapTerrainProvider还实现了requestHeightmapTerrain方法。这个方法应该由子类实现,以便返回自定义高程数据。
在自定义高程数据时,需要确定数据的分辨率、范围和格式。可以使用数字高程模型(DEM)文件、图像文件、数据库或其他格式存储高程数据,并将其转换为CustomHeightmapTerrainProvider可以处理的格式。
使用CustomHeightmapTerrainProvider可以实现各种自定义地形效果,例如在虚拟环境中加载真实世界的高程数据、制作类似Minecraft的方块式地形等
CustomHeightmapTerrainProvider类的常用属性和方法与CesiumTerrainProvider相似,这里不再赘述,详细内容请参考官方文档
ArcGISTiledElevationTerrainProvider是Cesium中用于加载ArcGIS Server提供的切片瓦片服务作为高程数据的地形提供器。
errorEvent
:一个事件,当地形数据请求错误时触发credit
:一个Credit对象,描述了数据源和/或版权信息availability
:定义地形数据可用性的TimeIntervalCollection对象requestTileGeometry(x, y, level, request)
:请求给定坐标和级别的地形几何数据。该方法返回Promise对象,可以在其完成时获得地形几何数据getLevelMaximumGeometricError(level)
:获取指定级别的最大地形几何误差getTileDataAvailable(x, y, level)
:查询给定坐标和级别的地形数据是否可用EllipsoidTerrainProvider是Cesium中的一个内置地形提供器,它提供了一个基于椭球体的模型来呈现地球表面的近似几何形状。与其他地形提供器不同的是,EllipsoidTerrainProvider并不依赖于实际的地形数据,而是根据其定义的椭球体模型生成地球表面的高程网格。
EllipsoidTerrainProvider继承自TerrainProvider类,具有TerrainProvider的所有功能,例如异步加载地形数据、请求地形数据等
EllipsoidTerrainProvider适用于需要快速渲染地球表面的应用场景,例如在展示全球范围的卫星图像或者天气数据时,可以通过EllipsoidTerrainProvider快速生成一个近似的地球表面几何模型,并将数据贴合到这个模型上,从而实现快速、流畅的地球表面展示效果。
tilingScheme
:一个TileTilingScheme对象,描述了该地形提供器使用的切片方案。ellipsoid
:描述地球近似几何形状的Ellipsoid对象getLevelMaximumGeometricError(level)
:获取指定级别的最大地形几何误差requestTileGeometry(x, y, level, request)
:请求给定坐标和级别的地形几何数据。该方法返回Promise对象,可以在其完成时获得地形几何数据在Cesium中加载地形数据非常简单,只需要创建一个CesiumTerrainProvider对象,配置相关参数,并将其赋值给viewer.terrainProvider 就可以完成加载地形数据
// 加载地形数据
const terrainProvider = new Cesium.CesiumTerrainProvider({
url:Cesium.IonResource.fromAssetId(3956),
requestWaterMask:true,//请求水体效果所需要的海岸线数据
requestVertexNormals:true,//请求地形照明数据
})
viewer.terrainProvider = terrainProvider
刷新页面,将地球缩放的一定级别,可以看到地形数据已经加载进来了,起伏的山脉还是比较明显的。
OK,关于Cesium加载地形数据的内容,就介绍到这里了。