前言
GDAL(Geospatial Data Abstraction Library )是一个使用C/C++语言编写的操作各种地理数据格式的跨平台的,开源库。
现有的大部分GIS或者遥感平台,不论是商业软件ArcGIS,ENVI还是开源软件GRASS,QGIS,都使用了GDAL作为底层构建库。
GDAL库由OGR和GDAL项目合并而来,OGR主要用于空间要素矢量数据的解析,GDAL主要用于空间栅格数据的读写。另外,空间参考及其投影转换使用开源库 PROJ.4。
GDAL提供了C/C++接口,并且通过SWIG提供了Python,Java,C#等的调用接口。当我们在Python中调用GDAL的API函数时,其实底层执行的是C/C++编译的二进制文件。
GDAL不但提供了API接口方便开发人员开发自己的功能,而且还提供了一系列实用工具可以实现方便快速的空间数据处理。
GDAL3.0以上编译依赖PROJ6投影库,而PROJ6的proj.db使用sqlite存储数据,所以又依赖SQLite3环境,所以在编译GDAL之前我们需要先编译SQLite和PROJ6。
安装(编译)工具 cmake官方下载地址为https://cmake.org/download/。目前最新版3.18.3。windows x64有cmake-3.18.3-win64-x64.zip和cmake-3.18.3-win64-x64.msi两个版本下载。
一、SQLite3编译
1、下载
下载地址:https://www.sqlite.org/download.html
下载版本:3.33.0
下载内容:
- Source Code下的sqlite-amalgamation-3330000.zip
- Precompiled Binaries for Windows下的sqlite-dll-win64-x64-3330000.zip,sqlite-tools-win32-x86-3330000.zip
2、解压
将下载的文件解压到sqlite-3.33.0文件夹内,如下所示:
sqlite-3.33.0
├─sqlite-amalgamation-3330000
│ shell.c
│ sqlite3.c
│ sqlite3.h
│ sqlite3ext.h
├─sqlite-dll-win64-x64-3330000
│ sqlite3.def
│ sqlite3.dll
└─sqlite-tools-win32-x86-3330000
sqldiff.exe
sqlite3.exe
sqlite3_analyzer.exe
3、创建静态库工程
- 在sqlite-3.33.0目录下创建一个空的c++工程,工程名为SQLite3
- 将sqlite3.c、sqlite3.h、sqlite3ext.h、sqlite3.def四个文件添加到工程中

- C/C++ --> 预处理器 --> 预处理器定义:设置预定义处理
_USRDLL
SQLITE_ENABLE_RTREE
SQLITE_ENABLE_COLUMN_METADATA
SQLITE_ENABLE_FTS5
SQLITE_ENABLE_UNLOCK_NOTIFY

-
设置模块定义文件,链接器 --> 输入 --> 模块定义文件:sqlite3.def

-
修改模块定义文件:在最后追加sqlite3_unlock_notify

-
配置类型改为静态库lib

-
最后生成解决方案,在D:\sqlite-3.33.0\SQLite3\x64\Debug文件夹可以看到SQLite3.lib静态库。
-
在SQLite目录中分别创建include和lib和bin文件夹,以备后用。
将刚才生成的.lib文件放入lib文件夹中,
将sqlite3.h、sqlite3ext.h放入include中,
将sqlite-tools-win32-x86-3330000中的sqlite3.exe放在bin文件夹中。
二、PROJ6编译
gdal的编译依赖于PROJ6投影库,否则会有如下提示。
PROJ_INCLUDE should be defined. PROJ >= 6 is a required dependency
1、下载
下载地址:https://proj.org/download.html
下载版本:6.3.2
将下载后文件解压到D:\proj-6.3.2文件夹内。
2、配置编译项
-
在源码目录中创建build文件夹,打开cmake-gui.exe

-
点击Configure,编译64位,vs2015

点击Finish,会出现错误。

SQLITE3_INCLUDE_DIR和SQLITE3_LIBRARY属性,可以看到现在它们的Value值都为NOTFOUND的状态,设置为前边准备的include和SQLite3.lib的路径。

如果EXE_SQLITE3也提示NOFOUND的话,修改为相应的SQLite3.exe的路径。
设置文件生成目录,我设置的是D:/proj-6.3.2/OSGeo4W。

重新点击Configure,提示Configuring done。

本文详细介绍了如何在Windows环境下编译GDAL 3.1.2、PROJ 6.3.2以及SQLite3。首先,编译SQLite3以创建静态库,然后编译PROJ6,最后编译GDAL。在编译过程中,涉及到预处理器定义、模块定义文件设置、CMake配置以及VS2015命令行的使用。完成编译后,还需设置环境变量以确保程序运行时找到依赖的dll文件。文章还提供了一个简单的C++代码示例,演示了如何使用GDAL读取和解析地理栅格数据。
最低0.47元/天 解锁文章
1243

被折叠的 条评论
为什么被折叠?



