上一节中我们已经下载好了全球的 srtm 高程文件包,这一节我们来看如何将包里 tif 文件进行合并。
# 准备工作
- unzip 所有 srtm 包
- docker
# 使用 gdal 合并所有 tif 文件
docker pull osgeo/gdal
1
启动 gdal 容器
docker run -it --name gdal -v your_tif_file_path:/share osgeo/gdal /bin/bash
1
进入容器
docker exec -it gdal bash
1
合并 tif
gdalbuildvrt tiles.vrt *.tif
1
# 使用 tumgis/ctb-quantized-mesh 生成 terrain 文件
docker pull tumgis/ctb-quantized-mesh
1
启动 mesh 容器
docker run -it --name ctb-mesh -v your_tif_file_path:/share tumgis/ctb-quantized-mesh /bin/bash
1
解析 vrt 生成 terrain 文件
ctb-tile -f Mesh -C -N -v -o ./terrain/ ./tiles.vrt
1
这一步耗时较长,可以喝杯咖啡
生成 layer.json 文件
ctb-tile -f Mesh -C -N -l -o ./terrain/ ./tiles.vrt
1
# 使用 cesium-terrain-server 构建瓦片服务
docker pull geodata/cesium-terrain-server
1
启动容器
docker run -p 8080:8000 -v your_terrain_file_path:/data/tilesets/terrain geodata/cesium-terrain-server
1
然后访问 http://localhost:8080/ 即可访问了
# An error occurred in "CesiumTerrainProvider": Failed to obtain terrain tile X: 1 Y: 0 Level: 0. Error message: "RangeError: Invalid typed array length:
- https://community.cesium.com/t/problems-with-cesiumterrainprovider-and-heightmap-1-0-tiles/7642
- https://github.com/tum-gis/cesium-terrain-builder-docker/issues/2
- https://githubmemory.com/repo/geo-data/cesium-terrain-builder/issues/96
terrain 目录下需要加一层 tiles 目录,tiles 目录下才是分级的 terrain 文件