osgEarth是基于三维引擎osg开发的三维数字地球引擎库,在OpenSceneGraph(为了便于后文表述,简称为osg)基础上实现了瓦片调度插件,可选四叉树调度插件,更多的地理数据加载插件(包括GDAL,ogr,WMS,TMS,VPB,filesystem等),再结合一套地理投影转换插件,这样就能够实现高效处理加载调度地理数据在三维地球上的显示,实现三维虚拟地球。
本文讲解如何利用cmake等工具从osgEarth源码编译出osgEarth库。
从Download | Download | CMake下载 CMake图形化工具,截至2023年4月5日,最新版本为3.26.3。直接双击安装即可。
官网学习文档为:Welcome to osgEarth! — osgEarth 3.3 documentation
本人环境说明如下:
特别说明:osgearth和osg版本代差不能太大,否则编译osgearth时会报很多osg的头文件找不到的错误。现实中,我用osgearth3.2版本,而osg用3.4.1版本,则报很多类似如下的错误:
无法打开包括文件: “osg/BindImageTexture”: No such file or directory
error C2039: "VertexArrayState": 不是 "osg" 的成员
这是因为osgearth3.2版本用到很多osg新加入的功能,而这些功能在版本较低的osg中没有导致。
关于如何用CMake生成VS工程,参见 后文描述,和后文利用CMake编译osgEarth类似。
1):因为osgearth是在osg库基础上开发的,需要配置osg库才行,所以需先从osg源码编译出osg库,具体编译方法参见《windows平台下用CMake编译osg》博文。
2):打开CMake界面,在CMake图形界面中的“Where is the source code:”的编辑框中输入osgearth-3.2源码目录,注意:该目录必须是CMakeList.stxt所在目录,且目录路径不能有中文,否则CMake会报错。
3):在“Where to build the binaries”中输入osgearth-3.2编译、链接后生成文件的存放目录。为避免编译产生的文件和源码混放在一起,一般在源码目录的同级目录新建一个类似build目录来存放编译输出结果文件。CMake界面如下:
图1
4):点击cmake图形界面中的“configure”按钮或“Tools->Configure”菜单,如果是初次执行,则弹出如下界面:
根据本机装的VS选择VS版本,我本机装的是VS2022。注意:后面一项得选x64,相信现在用win32的已经很少了。单击Finish按钮,关闭该对话框回到cmake主界面,单击左下角的“Genrerate”,出现如下错误:
这是因为osg相关库及某些第三方库没有配置,如下:
解决方法如下:
说明:
Error in configuration process, project files may be invalid
所有配置好后,单击“configure”,之后单击“Generate”,然后单击“Open Project”启动VS开始编译。
1)无法打开包括文件: “sqlite3.h”: No such file or directory
这是在CMake中没有配置sqlite3引起的,请按前文描述配置好该库。
2)无法打开包括文件: “vector_tile.pb.h”: No such file or directory
这是在CMake中没有配置protobuf引起的,请按前文描述配置好该库。
3) error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值 “MDd_DynamicDebug”不匹配值“MTd_StaticDebug”
解决方法:找到报错的工程,然后在该工程单击右键,选择“属性->配置属性->C++->代码生成”属性页中的“运行库”下拉框中选择“多线程 (/MTd)”,如果还不行改为其它的试试,如:MT、Md等 。