最近在研究cesium,发现cesium 用的地形数据跟osgEarth的还不太一样,他们采用quantized-mesh这个数据格式,之前在osgEarth上用的地形瓦片在cesium上用不了,让人比较恼火。好在github上有人已经实现了从tif格式的dem数据转到.terrain格式的工具:cesium-terrain-builder,不过该项目在windows下编译让人比较难受,所以纪录一下整个过程。

源码和工具下载

虽然作者在github上说这个项目只依赖gdal,不过在windows上发现它还依赖zlib(并且对这两个库的版本也有所要求),所以要想完整的编译整个项目需要分别下载这些源码:

  1. cesium-terrain-builder
  2. gdal-2.0.2
  3. zlib-1.2.11
  4. cmake-3.9.0
  5. vs2017(这个就看自己需求了,使用cmake生成自己对应的vs版本工程文件即可)

zlib编译生成

在完成zlib解压之后,使用cmake配置,生成vs工程:

  1. zlib cmake配置 zlib_cmake_conf
  2. zlib vs工程配置 zlib_vs
  3. zlib 工程编译 zlib_build
  4. 生成结果 在完成debug和release之后,生成内容如下如所示: zlib_result,其中include和lib文件夹在后边会有用到。

gdal编译生成

gdal通过x64 Native Tools Command Prompt for VS 2017工具进行编译: 打开这个命令行工具之后,cd进入到gdal源码目录:

1
2
3
4
5
cd G:\gdal-2.0.2
g:
nmake /f makefile.vc MSVC_VER=1910 WIN64=YES
nmake /f makefile.vc MSVC_VER=1910 WIN64=YES install
nmake /f makefile.vc MSVC_VER=1910 WIN64=YES devinstall

其中MSVC_VER代表的是VS的版本

1
2
3
4
5
6
7
8
9
# 1910 = 15.0(2017)
# 1900 = 14.0(2015)
# 1800 = 12.0(2013)
# 1700 = 11.0(2012)
# 1600 = 10.0(2010)
# 1500 = 9.0 (2008)
# 1400 = 8.0 (2005) - specific compilation flags, different from older VC++
# 1310 = 7.1 (2003) # is it still supported ?
# 1300 = 7.0 (2002) # is it still supported ?

完成上述操作之后会默认在C盘生成gdal编译好的结果:

cesium-terrain-builder编译生成

首先打开cesium-terrain-builder源码文件夹,将CMakeLists.txt拖入cmake,主要配置gdal和zlib的路径: 完成配置之后,生成vs工程,直接编译即可。

生成结果

经过上边一番折腾之后,最终生成这些东西: 他们的具体用法可以参考这里:使用方法

总结

经过这次折腾学会了使用vs的Native Tools,也知道使用cmake生成vs工程并不是什么复杂的事情,而最终目的就是参考这个开源工具的思路实现要python的切片工具。