背景前提

  地理空间数据抽象库(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. 使用springboot devtools工具实现热部署

    一.在maven父工程pom文件中添加依赖 二.在子工程中添加依赖 三.在IDEA中勾选 Build project automatically项 四. Shift+Ctrl+Alt+/,选择Regi ...

  2. RabbitMQ --- 直连交换机 【 同步操作,等到消费者处理完后返回处理结果 】

    1.前言 RabbleMQ这种消息中间件,主要的功能是使用异步操作,来达到解耦的目的,比如,有系统a和系统b, 系统a通过消息中间件通知系统b来做业务,那么系统a只需要把要做的事情[也就是消息]发给消 ...

  3. Maven+ajax+SSM实现编辑修改

    转载自:https://www.cnblogs.com/kebibuluan/p/9017754.html 3.尚硅谷_SSM高级整合_使用ajax操作实现修改员工的功能 当我们点击编辑案例的时候,我 ...

  4. console.log(a)和console.log(window.a)的区别?

    console.log(window.l); //undefined console.log(l); //Uncaught ReferenceError: l is not defined js对于未 ...

  5. 《手把手教你》系列技巧篇(五十八)-java+ selenium自动化测试-分页测试(详细教程)

    1.简介 前几天,有人私信里留言问宏哥,分页怎么自动化测试了,完了给他说了说思路,不知道最后搞定没有,索性宏哥就写一篇文章来讲解和介绍如何处理分页. 2.测试场景 对分页来说,我们最感兴趣的和测试的无 ...

  6. 【白话科普】《逆局》最终 boss 隐藏自己的方式是?

    二狗子最近在看一个很火的电视剧<逆局>.作为一部悬疑犯罪剧,剧中多个案件交织并进,悬念和转折拉满,让狗子看的直呼过瘾.特别最后一幕,杨副座和主角团同时对 U 盘中的关键证据"器官 ...

  7. Centos下安装Scala(2)

    1.下载压缩包 命令:wget https://downloads.lightbend.com/scala/2.11.8/scala-2.11.8.tgz 2.解压缩包 命令:tar -xzvf sc ...

  8. C#进阶——记一次USB HID的各种坑(x86,x64,win10,win7)

    一.简叙 写工控上位机的搬砖人,难免会遇到USB通讯,在一个项目中,我写的上位机使用USB HID协议和STM32通讯传输数据,从零大概花了几天找例程,找资料,最后是各种搬砖修补,终于出来了一个出版D ...

  9. openssl基本原理 + 生成证书(转)

    https://blog.csdn.net/cpcpcp123/article/details/108885922 https://liruzhen.blog.csdn.net/article/det ...

  10. gin中绑定uri

    package main import ( "github.com/gin-gonic/gin" "net/http" ) type Person struct ...