GDAL库简介以及在Windows下编译过程

2023-11-07

GDAL(Geospatial Data Abstraction Library,地理空间数据抽象库)是一个在X/MIT许可协议下的开源栅格空间数据转换库。官网http://www.gdal.org/index.html,也可参考GitHub https://github.com/OSGeo/gdal,最新release版本为2.1.1.

GDAL是一个在X/MIT许可协议下读写空间数据(包括栅格数据和矢量数据)的开源库,它利用抽象数据模型来表达所支持的各种文件格式,还使用一系列命令行工具来进行数据转换和处理。

OGR(OGR Simple Features Library)是GDAL项目的一个分支,功能与GDAL类似,只是它提供对矢量数据的读写支持。同时它实现了一个对空间参考信息进行处理的类,用来对空间数据的空间信息进行处理。

GDAL支持的数据格式分为两种:栅格数据格式和矢量数据格式。GDAL在每次版本更新的时候,都会加入对新的格式的支持。

GDAL2.1.1源码中目录结构介绍:

alg:该目录下存放的是GDAL库中提供的一些算法的源代码;

apps:该目录下存放的是GDAL库中提供的一些命令行工具集的源代码;

bridge:该目录下存放的是用来连接GDAL抽象类的定义与GDAL自己的结构体定义及其实现的源代码;

data:该目录下存放的是GDAL库中需要用到的一些”配置文件”;

doc:该目录下存放的是用来生成GDAL帮助文档的一些dox文件;

frmts:该目录下存放的是GDAL针对不同的特定图像格式解析的源代码;

gcore:该目录下存放的是GDAL抽象类的数据集、图像、波段的读写接口等代码;

html:该目录下存放的是GDAL生成的帮助文档;

m4:该目录下存放的是以m4为后缀的文件,m4文件叫Macro Processor Library,主要是用autoconf来产生configure配置文件,继而自动生成Makefile文件;该目录在Windows下无用;

man:该目录下存放的是用来生成Linux或者其它平台下的帮助文件,Windows下无用;

ogr:该目录下存放的是OGR库源代码;

port:该目录下存放的是CPL库的源代码;CPL是一个GDAL的底层支持库,CPL库中定义了一些字符串的操作、文件处理、网页请求、数据库连接、哈希表、字符加密文件、压缩等基础的函数;

swig:该目录下存放的是swig的脚本;swig的作用就是可以将C/C++的库封装为Python、C#、Java、Perl和Ruby等其它语言的访问接口;

vb6:该目录用来将GDAL编译成一个VB6的模板;

alcocal.m4:该文件是用autoconf来产生configure配置文件;

autogen.sh:shell文件,该文件通过调用autoconf来产生configure配置文件;

COMMITERS:该文件中的内容是GDAL开发人员的信息,包括姓名、联系邮箱以及各自负责开发的模块说明等;

Doxyfile:用来生成帮助文件;

GDALmake.opt.in:该文件是Linux平台下的GDAL库编译配置文件;

gdalnightlysvn.sh:该文件是Linux平台下调用svn获取GDAL源代码的一个shell脚本;

GNUmakefile:GNU的make文件;

HOWTO-RELEASE:该文件是GDAL发布版本的一些说明;

install-sh:该文件是Linux平台下GDAL安装的shell脚本;

LICENSE.TXT:该文件是GDAL的许可说明文件;

ltmain.sh:Linux平台下libtool的shell脚本,windows下无用;

makefile.vc:GDAL的编译文件,用来将源代码编译成dll文件;

makegdal_gen.bat:用来生成VS的工程文件的批处理文件;

NEWS:该文件是介绍GDAL的新增功能以及修复的bug记录等;

nmake.opt:GDAL编译选项配置文件,在编译GDAL时,可以指定GDAL绑定的其它库;

PROVENANCE.TXT:GDAL目录说明文件;

VERSION:GDAL版本信息。

下面介绍GDAL2.1.1源码在windows vs2013中的编译步骤:

1.      从http://download.osgeo.org/gdal/2.1.1/下载最新稳定版本2.1.1,gdal211.zip并解压缩至E:\GitCode\GDAL_Test\src\gdal目录下;

2.      修改nmake.opt文件: MSVC_VER=1800 GDAL_HOME = "E:\GitCode\GDAL_Test\lib_x64_release"

3.      以管理员身份打开”VS2013 x64 兼容工具命令提示”;

4.      首先切换到VS2013的安装目录下执行:

C:\Program Files (x86)\Microsoft Visual Studio12.0\VC\vcvarsall.bat  amd64;

5.      然后切换到GDAL源码目录E:\GitCode\GDAL_Test\src\gdal下依次执行:

nmake /f makefile.vc MSVC_VER=1800 WIN64=YES
nmake /f makefile.vc MSVC_VER=1800 WIN64=YES install
nmake /f makefile.vc MSVC_VER=1800 WIN64=YES devinstall

6.      执行完以上三条命令后,就会在E:\GitCode\GDAL_Test\lib_x64_release目录下生成gdal x64 release相应头文件、静态库和动态库

7.      按照以上类似步骤即可生成x64 debug、win32 release、win32 debug相应库:

C:\Program Files (x86)\Microsoft Visual Studio12.0\VC\vcvarsall.bat  x86
nmake /f makefile.vc MSVC_VER=1800 DEBUG=1

如按照以上的步骤生成的库运行时提示缺失msvcr120.dll,则修改nmake.opt文件,将130行到138行,四处的/MD改成/MT即可。

按照上面的步骤只能生成相应的库,确不能生成vc工程,下面介绍下能生成vc工程的操作步骤:

1.      将nmake.opt文件中的SYM_PREFIX=_ 改为SYM_PREFIX=

2.      将makefile.vc中的内容

BASE_INCLUDE =	/INCLUDE:_GDALSimpleImageWarp@36 \
		/INCLUDE:_GDALReprojectImage@48 \
		/INCLUDE:_GDALComputeMedianCutPCT@32 \
		/INCLUDE:_GDALDitherRGB2PCT@28 \
		/INCLUDE:_OCTNewCoordinateTransformation@8 $(VB6_SAFEARRAYSYM)
调整为:

BASE_INCLUDE =	/INCLUDE:$(SYM_PREFIX)GDALSimpleImageWarp \
		/INCLUDE:$(SYM_PREFIX)GDALReprojectImage \
		/INCLUDE:$(SYM_PREFIX)GDALComputeMedianCutPCT \
		/INCLUDE:$(SYM_PREFIX)GDALDitherRGB2PCT \
		/INCLUDE:$(SYM_PREFIX)OCTNewCoordinateTransformation $(VB6_SAFEARRAYSYM)
3.      在刚才打开的命令行窗口中输入:makegdal_gen.bat 10.00 64 > makegdal10.vcproj ,执行完后会生成makegdal10.vcproj;

4.      打开vs2013,将其makegdal10.vcproj加入到工程中,会升级到vs2013;

创建一个控制台工程GDAL_Test,测试生成库的正确性,测试代码如下:

#include <iostream>
#include <gdal_priv.h>
#include <ogrsf_frmts.h>
#include <gdal_alg.h>

int main()
{
	const char* image_name = "E:/GitCode/GDAL_Test/test_images/a.tif";
	GDALAllRegister();
	GDALDataset* poSrc = (GDALDataset*)GDALOpen(image_name, GA_ReadOnly);
	if (poSrc == nullptr) {
		std::cout << "input image error" << std::endl;
		return -1;
	}

	int width_src = poSrc->GetRasterXSize();
	int height_src = poSrc->GetRasterYSize();
	int band_count_src = poSrc->GetRasterCount();
	fprintf(stderr, "width: %d, height: %d, bandCount: %d\n", width_src, height_src, band_count_src);
	GDALDataType  gdal_data_type = poSrc->GetRasterBand(1)->GetRasterDataType();
	int depth = GDALGetDataTypeSize((GDALDataType)gdal_data_type);
	fprintf(stderr, "depth: %d\n", depth);

	GDALClose((GDALDatasetH)poSrc);

	std::cout << "ok" << std::endl;

	return 0;
}
结果如下:

由于编译GDAL源码需要较长的时间,这里把windows下x86/x64 debug/release编译好的库都放在了GitHub上,有需要的可以去下载。


GitHubhttps://github.com/fengbingchun/GDAL_Test

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GDAL库简介以及在Windows下编译过程 的相关文章

随机推荐

  • javascript使用方括号([])引用对象的属性和方法

    在JavaScript中 每个对象可以看作是多个属性 方法 的集合 引用一个属性 方法 很简单 即 对象名 属性 方法 名除此之外 还可以用方括号的形式来引用 对象名 属性 方法 名 注意 这里的方法名和属性名是一个字符串 而非原先点号后面
  • oday-------------powered by discuz! 7.2

    利用google搜索关键字 intxt powered by discuz 7 2 找到一个论坛 注册一个账号注册好后 使用exp http 此处为论坛地址 misc php action imme binding response res
  • 一种简单快速有效的低照度图像增强方法

    一种简单快速有效的低照度图像增强方法 一 本文介绍的是一种比较实用并且去阴影效果很好的方法 选自2004年Tao的一篇论文 名称是 An Integrated Neighborhood Dependent Approach for Nonl
  • 采编系统服务器架构,遂宁日报新闻采编系统的设计与实现

    摘要 新闻稿件采编系统是现今报社现代化办公的必备工具 它对于提高新闻报社工作效率和网络接轨有着重要的意义 随着现代社会中网络化 数字化的不断进步 单凭传统的系统加上纯手工的劳动已经越来越难以满足日报社新闻采编管理工作的需求 1 新闻稿件采编
  • python中csv、json文件的写入和读取

    txt文本文件读取 txt文本文件读取 def txt writter 写文件 函数说明文档 with open data txt w encoding utf 8 as f f write hi n 写一行 lines hello n w
  • Python 爬虫入门的教程(1小时快速入门、简单易懂、快速上手)

    这是一篇详细介绍 Python爬虫入门的教程 从实战出发 适合初学者 读者只需在阅读过程紧跟文章思路 理清相应的实现代码 30 分钟即可学会编写简单的 Python 爬虫 这篇 Python 爬虫教程主要讲解以下 5 部分内容 了解网页 使
  • Velodyne VLP16 激光雷达使用(遇到问题要学会看文档)

    VLP 16激光雷达是Velodyne公司出品的最小型的3维激光雷达 保留了电机转速可调节的功能 实时上传周围距离和反射率的测量值 VLP 16具有100米的远量程测量距离 精巧的外观设计使得安装非常方便 重量轻 只有830g 非常适合安装
  • ChatGPT帮助一名儿童确诊病因,之前17位医生无法确诊

    9月13日 Today消息 一位名叫Alex的4岁儿童得了一种浑身疼痛的怪病 每天需要服用Motrin 美林 才能止痛 3年的时间 看了17名医生无法确诊病因 新闻地址 https www today com health mom chat
  • C++ vector容器

    1 vector基本概念 vector 的数据结构和数组非常相似 也称为单端数组 不同之处在于数组是静态空间 而 vector 可以动态扩展 动态扩展 不是在原空间之后续接新空间 而是找更大的内存空间 然后将原数据拷贝新空间 释放原空间 使
  • 四位数码管3641AS的FPGA实现

    一 数码管介绍 四位数码管3641AS为一款共阴极的四位八段数码管 其具体的每一段为单个二极管 可通过压降实现点亮 通过控制单位多段二极管的点亮实现数字或字母等字符 共阴极 八段发光二极管的阴极端连接在一起 阳极端分开控制 使用时候公共端接
  • 这几款能制作思维导图的软件分享给你

    思维导图工具的优势在于它可以大大提高思考效率 使用思维导图工具 可以更好地组织和理解复杂的信息 并从中提取出重要的要素 此外 思维导图也可以帮助人们更好地记忆信息 接下来这篇文章 我将会介绍几款好用的思维导图软件 一起来看看吧 软件一 简道
  • Linux时间操作(time、gettimeofday)

    自 http blog chinaunix net space php uid 24148050 do blog id 320294 一 time函数 include
  • idea使用Markdown流程图

    环境 Windows10 idea2021 1 社区版 方法 其实主要就是让Markdown的mermaid生效 如何设置mermaid CTRL ALT S调出设置 搜索 Markdown 找到enable extend name 勾选后
  • Spark(30) -- Spark SQL中更多Parquet文件读写(scala)

    什么时候会用到 Parquet 在 ETL 中 Spark 经常扮演 T 的职务 也就是进行数据清洗和数据转换 为了能够保存比较复杂的数据 并且保证性能和压缩率 通常使用 Parquet 是一个比较不错的选择 所以外部系统收集过来的数据 有
  • Mysql this is incompatible with sql_mode=only_full_group_by

    MySQL的sql mode合理设置 sql mode是个很容易被忽视的变量 默认值是空值 在这种设置下是可以允许一些非法操作的 比如允许一些非法数据的插入 在生产环境必须将这个值设置为严格模式 所以开发 测试环境的数据库也必须要设置 这样
  • 标准库函数

    aplay apply 函数可以看作一个配置函数 你可以传入一个接收者 然后调用一系列函数来配置它以便使用 调用一个个函数类配置接收者时 变量名就省掉了 apply 能让每一个配置函数 都做用于接收者 这种行为叫做 相关作用域 apply
  • 01-iOS如何集成OpenCV

    转自 https www jianshu com p 13a302dfd8f0 OpenCV 是什么 简述 OpenCV是开源计算机视觉库 是一个非常强大的库 可跨平台使用 其中包含了数百种计算机视觉算法 OpenCV 是由C 编写 最早是
  • Redis配置与优化

    文章目录 Redis配置 优化 1 关系型数据库与非关系型数据库 1 1 定义 1 2 区别 1 3 产生背景 2 Redis 2 1 Redis简介 2 2 Redis优点 2 3 Redis缺点 2 4 Redis使用场景 2 5 Re
  • MQTT.fx连接阿里云

    第一步 查看阿里云设备 MQTT 参数 点击 设备 点击 设备信息 点击mqtt连接参数 查看 第2步 打开 MQTT fx 软件 点击 齿轮 点击 新建项目 输入项目名称 MQTT test 01 复制mqtt连接参数 clientId
  • GDAL库简介以及在Windows下编译过程

    GDAL Geospatial Data Abstraction Library 地理空间数据抽象库 是一个在X MIT许可协议下的开源栅格空间数据转换库 官网http www gdal org index html 也可参考GitHub