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