地形瓦片的制作需要Cesium Terrain Builder工具
如果使用 tumgis/ctb-quantized-mesh ,可能还需要魔法才行,到docker hub上下载 tumgis/ctb-quantized-mesh。
注意:我这里使用的是 tumgis/ctb-quantized-mesh 进行处理的。直接到docker hub上下载的 tumgis/ctb-quantized-mesh
由于 docker hub 官网上不能直接下载镜像,因此,需要先安装docker desktop,然后在docker desktop中pull tumgis/ctb-quantized-mesh:latest, 将镜像下载到本地
注意:我没有直接在本地运行,有将该镜像放到我本地的虚拟机上运行的下面的步骤可以跳过。
docker desktop 导出镜像命令
docker save -o cesium_builder.tar tumgis/ctb-quantized-mesh:latest
将导出的镜像文件cesium_builder.tar上传到虚拟机中,然后导入
docker load -i cesium_builder.tar
由于latest版本不方便区分,这里加上版本号
docker tag tumgis/ctb-quantized-mesh:latest tumgis/ctb-quantized-mesh:1.0.0
docker rmi tumgis/ctb-quantized-mesh:latest
至此,制作工具准备完毕。
启动docker容器
docker run -it --name cesium_terrain --privileged -v /home/data/cesium_terrain:/data tumgis/ctb-quantized-mesh:1.0.0
将虚拟机中的/home/data/cesium_terrain目录,挂载到容器的/data目录
注意:每次退出容器之后,再次进入都需要执行下面的命令来进入容器,因此,每次退出容器之后,记得执行 docker rm 命令,将容器删除。
在容器中执行如下命令:
创建地形瓦片命令(第一次执行):
ctb-tile -f Mesh -C -N -o /data/terrain/map /data/resources/map.tif
创建地形描述文件命令(第二次执行):
ctb-tile -f Mesh -C -N -l -o /data/terrain/map /data/resources/map.tif
注意:并不是选一条执行,而是两条都要执行,因为各自的工作不一样。
这边是将待制作的地形文件放在了/data/resources/map.tif, 将裁切后的瓦片以及描述文件放在了 /data/terrain/map目录,这两个目录都是容器内部的目录。
制作完成之后的地形文件很有可能是无法直接使用的,因为 ctb-tile 创建的地形图块经过 gzip 压缩,当从 Web 服务器提供时,请求地形图块时响应必须包含 HTTP 标头“content-encoding:gzip”。
解决方案有两种
1.添加地形数据服务。将栅格化后的瓦片数据放在Nginx服务器中,并在响应头中添加了 content-encoding:gzip 响应 HTTP 标头。(未尝试过)
2.从地形图块中 解压并替换 gzip 压缩。有一个缺点是数据集将更大(因为未压缩),但部署将更容易(无需运行额外的服务器)直接访问即可。
解压命令参考:gunzip -f -S terrain your_filename.terrain
点击查看解压代码
for f in $(find ./directory -name '*.terrain'); doecho ${f}mv ${f} ${f}.gzgunzip -f -S terrain ${f}.gz
done