上一节中我们已经下载好了全球的 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 文件

Last Updated: 2021/12/21 15:31:25