关于基于GDAL库QT软件平台下C++语言开发使用说明

背景前提

  地理空间数据抽象库(GDAL)是一个用于读取和编写栅格和矢量地理空间数据格式的计算机软件库,由开源地理空间基金会在许可的X / MIT风格免费软件许可下发布。 作为一个库,它为调用应用程序提供了一个抽象数据模型,用于所有支持的格式。 它还可以构建有各种有用的命令行接口实用程序,用于数据转换和处理。 PROJ.4库支持投影和转换。(摘自维基百科)

  相关的OGR库(OGR Simple Features Library [2])是GDAL源代码树的一部分,它为简单的特征矢量图形数据提供了类似的功能。(摘自维基百科)

  GDAL库在使用前可以进行源码编译,编译环境由用户所要进行后期的开发环境所决定,一般情况下,Windows系统下和Linux系统下所编译出来的GDAL库文件是不一样的,不仅如此,对于C++语言来说,不同编译器下的编译出来的GDAL库文件也是不一样的,例如QT所采用的MinGW编译器和VS的MSVC编译器所编译出来Windows系统下的GDAL库文件不通用(本人亲测,确实如此),所以不同的开发环境,不同的开发平台(IDE),不同的编译器,这都会影响前期的GDAL库源码的编译,再加上GDAL库本身又支持多种扩展库,以及多种语言下的二次编译,不同的用户有不同的扩展需求,所以针对GDAL库的复杂需求,配置不同的编译环境,编译出来的GDAL库文件也是各式各样,这可能也是开源地理空间基金会的GDAL / OGR项目管理委员会之所以进行开源的原因。

适用环境(开发)

  这里主要介绍前期随笔中所提到的基于GDAL库所适用的开发环境,以及是如何使用的,当然这里只是做一下简要的总结,至于具体的函数使用,以及库文件的编译,推荐大家可以去买一本李民录老师的《GDAL库源码剖析与开发指南》(说明:不是打广告,我也没收李老师一分钱,这里只是出于对初学者的一个建议)。

  本文GDAL库所采用的是QT软件平台下的MSVC 2017 x64编译器进行编译,编译出来的库文件也只能用于Windows系统下QT(MSVC)软件平台进行开发。编译过程中为了支持.nc等NetCDF类型文件的读取与写入,以及包括高斯投影在内的大部分投影功能,特地加入了netCDF(4.6.2)和proj4(4.9.3)库文件进行联合编译,编译出来以后经过测试,可以正常使用。

使用方法

  这里只介绍基于Qt软件下MSVC编译器进行GDAL库使用环境的配置。编译后的文件主要有三个:GDAL232、netCDF_462、proj493

image

  每一个文件夹内部都包含各自库本身所具有的bin文件、include文件、lib文件,bin文件主要是Windows程序运行时与系统进行交互的运行环境文件,lib是程序进行编译时的库文件,include文件是编写时的声明文件。下面主要说一下如何进行配置。

  首先进行系统环境变量的配置,环境变量的配置方法自行百度,只不过内容不一样,配置的变量名称为系统环境下的Path变量(PS:很多人初学者曾经问过我,为什么不在用户环境变量中的Path里面配置,这个我做一点解释,就是用户环境变量与系统环境变量的区别,用户环境变量里面的内容只有该用户登陆Windows系统进行使用时才有效,其他用户没有,但是系统环境变量就区别于这一点,它是所有用户都生效),具体配置结果如下:

image

  配置完环境变量完成以后进行测试一下,打开cmd命令行,输入gdalinfo命令,如果显示如下

image

  则说明配置成功,如果不是,则失败,检查相关错误。配置成功以后再进行编译环境的配置,打开Qt软件,新建Qt项目,右击项目名称,导入外部库文件,选择GDAL库lib文件夹中的.lib文件,选择完成后,如下图所示:

image

  点击确定以后,.pro文件中多处这几行文字表示添加成功,具体如下图所示:

image

  同样的步骤将netCDF库和proj4库同样添加进来,添加的lib文件分别是netcdf.lib,proj_i.lib和proj.lib三个文件。添加以后的内容如下:

image

  添加完成以后,即可进行代码的书写开发。具体开发步骤和内容参考上文所说的《GDAL库源码剖析与开发指南》一书,或者去查看李民录老师相关博文(博文主页:https://blog.csdn.net/liminlu0314)。

结束语

  本文主要是针对前期所发博文中所采用的库文件的前提介绍,也是对之前博文的补充说明,与此同时,为了扩大方便大家的使用,此处公开我之前项目文件中所使用的GDAL库文件,下载连接:https://files.cnblogs.com/files/thyou/GDAL.7z,希望对相关读者有一定的帮助。本文中所采用的GDAL库及扩展库所采用的源码均为官网最新版编译出来的,编译时间为2018年9月20日。

致谢

  从一开始的啥也不懂,编译库文件,到扩展其他语言版本,再到现在C++与Java语言下GDAL库的熟练使用,李老师以及相关的技术博主给予我分享了太多的经验知识,虽然学习的道路中充满荆棘,但是还是走过来了,这里要衷心的感谢你们,谢谢!

posted @ 2018-12-23 12:15  thyou  阅读(1964)  评论(0编辑  收藏  举报