背景前提

  地理空间数据抽象库(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

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

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

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

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

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

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

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

结束语

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

致谢

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

关于基于GDAL库QT软件平台下C++语言开发使用说明的更多相关文章

  1. 对于Linux平台下C语言开发中__sync_函数的认识

      reference:http://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html#Atomic-Builtins A built ...

  2. 对于Linux平台下C语言开发中__sync_函数的认识(转)

    reference:http://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html#Atomic-Builtins A built-i ...

  3. 基于GDAL库海洋表温日平均计算工具设计与实现 C++版

    技术背景 在对物理海洋数据处理过程中,表层温度是众多要素中的一种,本文书要是针对海洋表温数据批量日平均处理的一个工具设计.首先要在对当前的SST数据文件作一下简要的说明,SST全称为sea surfe ...

  4. 基于GDAL库,读取.grd文件(以海洋地形数据为例)C++版

    技术背景 海洋地形数据主要是通过美国全球地形起伏数据(GMT)获得,数据格式为grd(GSBG)二进制数据,打开软件通过是Surfer软件,surfer软件可进行数据的编辑处理,以及进一步的可视化表达 ...

  5. 基于GDAL库,读取.nc文件(以海洋表温数据为例)C++版

    对于做海洋数据处理的同学,会经常遇到nc格式的文件,nc文件的格式全称是NetCDF,具体的详细解释请查询官网[https://www.unidata.ucar.edu/software/netcdf ...

  6. 基于GDAL库,读取海洋风场数据(.nc格式)c++版

    经过这一段时间的对海洋数据的处理,接触了大量的与海洋相关的数据,例如海洋地形.海洋表面温度.盐度.湿度.云场.风场等数据,除了地形数据是grd格式外,其他的都是nc格式的数据.本文将以海洋风场数据为例 ...

  7. 基于GDAL库,读取.grd文件(以海洋地形数据为例)Java版

    技术背景 海洋地形数据主要是通过美国全球地形起伏数据(GMT)获得,数据格式为grd(GSBG)二进制数据,打开软件通过是Surfer软件,surfer软件可进行数据的编辑处理,以及进一步的可视化表达 ...

  8. Python安装BeautifulSoup库(Windows平台下)

    简介 参照官网Beautiful Soup4.4.0文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc/ 安装步骤 1.到https:// ...

  9. <2014 05 14> Android平台下2D/3D开发攻略

    Android通过OpenGL包含了对高性能2D和3D图形的支持,尤其支持OpenGLES API.OpenGL是一个跨平台的图形API,提供了软件操作3D图形硬件的接口.OpenGLES是一个专用于 ...

随机推荐

  1. Limiting Command Size

    Next: Controlling Parallelism, Previous: Unusual Characters in File Names, Up: Multiple Files [Conte ...

  2. Echart可视化学习(七)

    文档的源代码地址,需要的下载就可以了(访问密码:7567) https://url56.ctfile.com/f/34653256-527823386-04154f 正文: 官网找到类似实例, 适当分 ...

  3. IDEA开启热部署

    双击shift,查找Registry

  4. Educational Codeforces Round 117 (Rated for Div. 2)

    Educational Codeforces Round 117 (Rated for Div. 2) A. Distance https://codeforces.com/contest/1612/ ...

  5. 微软的Serialize和Newtonsoft的SerializeObject比较

    微软的序列化反序列化组件出来已有好几年了,刚出来的时候各种吐槽.最近在优化代码,比较了一下微软的Serialize和Newtonsoft的SerializeObject,感觉大部分场景下可以用微软的序 ...

  6. day5 数组对角线及最大值

    1.输出M行M列数组方针,求对角线元素和#define M 5void fun(int xx[][M], int n)//n行n列{ int i = 0; int sum = 0; for (i = ...

  7. django框架--登录注册功能(ajax)

    注册 实现一个注册功能 编写 html 内容 input 标签 csrf_token ajax 路由 视图: 提供页面 负责处理业务,返回响应 接收到   post   请求传递的参数 写库 返回   ...

  8. C# app.config 保存和读取例子

    保存: Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath); if ...

  9. Android开发----使用 Room 将数据保存到本地数据库

    Room介绍以及不使用SQLite的原因 Room 在 SQLite 上提供了一个抽象层,以便在充分利用 SQLite 的强大功能的同时,能够流畅地访问数据库. 处理大量结构化数据的应用可极大地受益于 ...

  10. [JavaWeb]Log4j的前因后果

    Log4j的前因后果 简介 Log4j的进化史 Log4J的三大组件: Logger:日志记录器,负责收集处理日志记录 (如何处理日志) Appender:日志输出目的地,负责日志的输出 (输出到什么 ...