地形是三维场景中的重要三维效果,能看到山峰的高低起伏效果,是三维场景的"骨骼", 如果想要看到真实感,地形数据(DEM)不可或缺。 Mars3D支持渐进流式加载和渲染全球高精度地形,并且包含海、湖、河等水面效果。相对2D地图,山峰、山谷等其他地形特征的更适宜在这种3D地球中展示。 目前一个三维场景只支持一个地形服务图层。 地形瓦片数据格式,是与瓦片底图类似的四叉树金字塔瓦片结构。
# 1. tif和terrain格式介绍
# 1.2 tif格式介绍
TIF文件为栅格图像文件,后缀为tif或tiff,是ogc规范的一种,全称GeoTiff。通常不能在资源管理器中查看tif栅格影像数据的坐标系信息,需要用GIS软件查看,因为它的坐标系信息写在数据文件内部。
tif可以有8位,24位等深度,一般真彩色是24位,而地形数据只有一个高度值,采用8位。目前很多卫星影像数据、地形数据的存储格式都是tif。
# 1.2 terrain格式介绍
# 1.3 DEM数据来源
目前很多网站可以下载公开的90米或30米精度的tif格式DEM地形数据,比如:
- http://www.gscloud.cn/ (opens new window) 、
- http://srtm.csi.cgiar.org/SELECTION/inputCoord.asp (opens new window)等网站下载。
也可以通过一些爬虫工具,如水经微图 (opens new window)、太乐地图 (opens new window)等下载谷歌地球的高精度DEM地形数据。
# 3. 处理工具
# 3.1 Cesium Terrain Builder 开源工具(CTB)
来源:Github开源
说明:按开源仓库教程操作,通过命令行的方式进行数据转换。
# 3.2 terr2cesiumApp工具
来源:QQ群703622028 风的心愿 提供
说明:按下载的文件内说明进行操作。
# 3.3 Cesiumlab工具“地形切片”模块
来源:北京西部世界公司
说明:从官网下载工具后,按工具说明注册帐号登录后即可使用,是图形化界面操作,操作比较简便。
官方下载地址 (opens new window) 官方操作说明 (opens new window)
# 4. 常见问题说明
我们先说一下地形栅格数据的几个关键参数: 强烈建议处理之前,先用arcmap打开,确保以下参数正常。
下面操作需要安装 ArcGIS for Desktop (opens new window) 软件,可以自行百度后下载。
# 1,空间参考(spatial reference)
spatial reference 定义了 栅格数据的坐标空间,下图为正常参数,如果arcmap 这里显示undefined,那表示空间参考未知,必然无法正常处理。 栅格的空间参考信息。如果tif中不含空间参考,但是空间参考数据处理人员又明确知道,那么可以在处理工具中指定。反过来说如果不确定,那就不要乱尝试,只会浪费处理时间。
# 2,无数据值(nodata)
nodata定义了删格中的无效数据数据值,也就是说如果栅格里某个像素的值 = nodata,意味着该像素没有数据。 对于nodata的处理,处理工具把该位置使用高程0填充。
但是原始数据中这个值很乱,完全是用户设置的,栅格里可能没有这个nodata信息,也可能为任意值。一般用户会设置一个超大的负数值,比如 -10000 ,-99999等。这里强烈建议,不要设置数据极值,例如-1.797693e+308 ,这种极值会导致中间计算出现非数字,导致地形处理异常。
如果原始栅格中没有nodata值,只有一种情况处理地形高程会正常(数据的空间参考是wgs84,地形数据边界为矩形)。
除此之外都必须知道nodata值对应的具体数值,还是必须通过arcmap打开tif,使用indentify工具,点击我们明确知道是无数据区域,那么获得他的值。
# 3,地理范围(extent)
栅格数据实际上是一张图片,必须要一个转换,把像素坐标转到地理坐标,这就是extent,在gdal里是geotransform。
正常这里应该显示的地理坐标,如果你发现这个extent的四个值里有0,那么基本意味着,你的tif的地理范围信息缺失。 tif 一般把这个信息存储在文件内,还有另一种方式存储为 同名的tfw 文件。所以我们处理或者拷贝数据的时候,如果有tfw,请一并拷贝。
# 分析处理地形的异常情况原因
确保上面三个关键参数正确,我们再分析处理地形的异常情况原因:
- 瞬间结束:空间参考缺失 或者 地理范围缺失
- 处理完成之后半边黑球:nodata 过大
- 地形高程异常:nodata 缺失或者不正确
- 位置不正确或伴随高程不正常:一般是空间参考不正确
根据异常原因,请在arcmap使用相关工具处理你的栅格数据。
# 3. 处理操作流程完整示例
# 3.1 下载tif地形文件
若已拥有tif文件直接进行下一步操作,下面我们通过水经微图软件下载为例讲解;
如下图操作,进行下载导出;
导出结果如下:
# 3.2 转换为terrain文件
下面我们以Cesiumlab工具“地形切片”模块为例,进行转换
- 选择地形切片模块;
- 添加文件,可以添加多个,勾选自己所需要导出的文件;
- 选择散列文件,导出terrain格式;
- 选择导出的路径
转换成功后的地形文件如下:
# 4.3 发布三维数据为HTTP服务
因为terrain数据一般都很大,建议发布为独立服务。
可以参考教程发布三维数据服务
# 4.4 在平台中加载模型
可以在地形加载示例 (opens new window) 更换对应url后进行验证,查看是否可以成功加载
var map = new mars3d.Map('mars3dContainer', {
terrain: {
url: 'http://localhost/mars3d-data/terrain',
show: true
},
})
2
3
4
5
6