Mars3D开发基础:加载DEM地形

885 阅读3分钟

Mars3D开发基础系列文档导航

  1. 三维场景 Map
  2. 地图控件
  3. 地图图层 Layer
  4. 加载DEM地形
  5. 栅格瓦片图层
  6. 坐标系及坐标变换
  7. 相机Camera及视角控制
  8. 时钟Clock及时序控制
  9. 事件机制
  10. 矢量图层Layer
  11. 矢量数据Graphic
  12. Property属性机制
  13. Material材质
  14. glTF小模型
  15. 3DTiles三维模型
  16. 场景特效
  17. 管理及分析功能

地形是三维场景中的重要三维效果,能看到山峰的高低起伏效果,是三维场景的"骨骼", 如果想要看到真实感,地形数据(DEM)不可或缺。 Mars3D支持渐进流式加载和渲染全球高精度地形,并且包含海、湖、河等水面效果。相对2D地图,山峰、山谷等其他地形特征的更适宜在这种3D地球中展示。 目前一个三维场景只支持一个地形服务图层。

image.png

image.png

1. DEM地形数据介绍

DEM数据就是 数字高程模型,就是描述每个点位的高程数据而已,没有其他附加信息,更不会包含影像图,单独展示是看不出什么名堂的。DEM数据在ArcGIS中打开只能看到是灰度图。

1.1.terrain格式介绍

通常地形是*.tif格式,我们平台中需要处理转换为terrain瓦片格式才能使用。 terrain地形也是瓦片地图金字塔模型结构组成。

image.png terrain瓦片的根目录有个layer.json的地形服务入口文件,来描述地形服务的基本信息和结构,如:data.mars3d.cn/terrain/lay…

terrain有2种格式:

  • Heightmap-1.0 :是Cesium早期使用的地形切片格式,每个瓦片存储65*65个高度值,通过Cesium API进行解析、构网、渲染、查询等。优点是切片简单,存储小,缺点是精度不高等。heightmap官方文档

  • Quantized-Math-1.0 : 是Cesium现在及未来使用的地形切片格式,会慢慢的替代Heightmap-1.0格式,因此,我们应该优先掌握该格式。quantized-mesh官方文档

tif转terrain: 地形数据处理教程

2. 加载地形

地形数据集是巨大的,通常都是GB或者TB级别。在普通3D引擎中,使用底层图形API去高效实现地形数据的可视化需要做很多事情。幸好Mars3D已经完成了这个体力活,而我们只需要写几行代码。地形数据单独是没法展示出来看的,只是一堆高程数据而已。结合影像图来展示,效果最佳。

2.1. 快速开始(初始化 new Map 时传入)

在构造Map时传入terrain参数说明

var map = new mars3d.Map('mars3dContainer', {
 terrain: {
   //type:'xyz',//默认未传入时代表 'xyz'
   url: 'http://data.mars3d.cn/terrain',
   show: true
 },
})

//关闭或开启地形,只需要修改下面属性
map.hasTerrain = false

2.2. 通过修改 map.terrainProvider 属性控制地形。

在创建完map后,通过 mars3d.LayerUtil.createTerrainProvider 创建地形服务对象,并赋值给 map.terrainProvider

//设置新的地形服务
map.terrainProvider = mars3d.LayerUtil.createTerrainProvider({
  type: 'arcgis',
  url: 'https://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer',
})

2.3. 运行效果

image.png