后记:如果你只是需要将tif处理成terrain,而不是学习处理过程,可以直接使用这个简单的工具:CesiumLab。不需要拼接成一个TIF,也不需要处理No-Data,地形功能免费。
背景:项目前端使用Cesium,地形服务一直使用外网的,常常因为翻墙访问的问题,导致地形数据取不到,进而导致地球不能加载,故决定搭建自己的地形服务,彻底解决这个问题。博文包含以下几个过程:
目录
2.接着找到地图上显示的潮州或者潮州旁边的城市所在的块,由于潮州比较小,地图上只看到汕头
一、下载原始地形数据
下载地址(精度90m): http://srtm.csi.cgiar.org/SELECTION/inputCoord.asp
将地图指向包含需要下载地形数据的城市所属的块,比如潮州
1.先找到中国
2.接着找到地图上显示的潮州或者潮州旁边的城市所在的块,由于潮州比较小,地图上只看到汕头
3.确认潮州市处于该块中
4.点击搜索search
5.进入下载页面,点击下载
完数据后解压所有的压缩包,得到:
二、处理地形数据
由于CTB工具不支持DEM为NoData值和float的数据,所以需要对数据进行处理。
多个tif必须县合并镶嵌成一张tif pixeltype从float转为int NoData值处理为0 我使用的是ArcGis10.2,arcgis10.2中文破解版
1.打开ArcMap
2.镶嵌
打开 地图处理->ArcToolbox->数据管理工具(Data Management Tools)->栅格(Raster)->栅格数据集(Raster Dataset) ->镶嵌(Mosaic)。
这个处理过程很久,可以在Result面板里查看转换过程。
3.处理NoData值
地图处理->ArcToolbox->spatial Analyst Tool->地图代数(Map Algebra)->栅格计算器(Raster Calculator)
如果打开后显示
则在 自定义->扩展模块->把Spatial Analyst 和 3D Analyst 都勾上。
输入处理公式为:
Con(IsNull("srtm_60_08.tif"),0,"srtm_60_08.tif")//srtm_60_08.tif对应你的文件
三、配置CTB环境
下载CTB工具包:资源
将ctb和gdal-data拷贝至合适的目录下, 比如:D:\wizard\resource\chaozhou\geojson\CTB 配置环境变量:
PATH:
系统变量:
四、使用CTB生成.terrain文件:
注意:执行前请确保输出文件夹存在且是空的,同时保证磁盘有足够的空间,全球数据大约800G。生成瓦片的等级不要太高,中国范围内单18级就需要大约700G。
打开cmd控制台,输入指令如:
ctb-tile -o D:\wizard\resource\chaozhou\geojson\terrain -s 14 -e 0 -r nearest -c 4 C:\Users\DELL\Desktop\result.tif
注:result.tif 第二步是最后生成的tif文件
这个过程更加费时间,需要等待很久,直到执行结束。
生成文件如下:
五、发布并使用Cesium调用
将生成的文件拷贝到Tomcat服务器下。 拷贝“覆盖至生成tiles结果”目录中的layer.json文件和0文件夹至生成结果目录下: 调用代码: var terrainLayer = new Cesium.CesiumTerrainProvider({ url: "http://localhost:8080/terrain", // 默认立体地表 }); scene.terrainProvider = terrainLayer; 至此,地形发布完成。如有错误之处欢迎指正。