GDAL(Geospatial Data Abstraction Library)是一个用于处理地理空间数据的开源库。它提供了一组功能丰富的API,用于读取、写入、转换和处理各种地理空间数据格式,包括栅格数据(如卫星图像、数字高程模型)和矢量数据(如矢量地图、矢量数据集)等。GDAL是由Open Source Geospatial Foundation(OSGeo)维护和发展的。
GDAL支持多种常见的地理空间数据格式,包括但不限于:TIFF、JPEG、PNG、HDF、NetCDF、GeoTIFF、Shapefile、FileGDB、SpatiaLite、PostGIS等。它提供了对这些数据格式的读取、写入和转换功能,可以在不同的地理空间数据之间进行格式转换、投影变换、数据子集提取等操作。
GDAL广泛应用于地理信息系统(GIS)、遥感图像处理、地理空间数据处理、地球科学、环境科学等领域。通过GDAL的API,开发者可以在各种编程语言(如C++、Python、Java等)中进行地理空间数据的处理和分析,从而实现地理空间数据的读取、处理、分析和可视化等功能。
需要注意的是,GDAL是一个专注于地理空间数据处理的库,与OpenGL这种图形渲染库在功能和应用领域上有所不同。GDAL主要用于处理地理空间数据的读取、写入和转换等操作,而OpenGL则专注于图形渲染和可视化。两者可以结合使用,例如使用GDAL加载地理空间数据,并将其转换为OpenGL纹理对象,然后使用OpenGL进行地理空间数据的可视化和渲染。
一般来讲,GDAL可以与OpenGL配合使用。GDAL负责读取和处理影像,OpenGL负责渲染影像。
VS2022配置OpenGL+Glad的教程可以参考我的这篇博客(Glad是一个用于管理和加载OpenGL函数指针的C/C++库。它可以生成用于加载OpenGL函数的代码,从而允许开发者在OpenGL应用程序中使用最新的OpenGL功能。Glad提供了简单的、跨平台的方法来加载和管理OpenGL函数指针,以便开发者可以方便地使用OpenGL的各种功能)。
VS2022配置OpenGL+GALD_程序员班长的博客-CSDN博客
一、事先说明
(一)配置的环境
Visual Studio 2022
SQLite----3410200
TIFF----4.5.0
PROJ----9.2.0
GDAL----3.5.3
我这里配置的是Debug版本的环境。
在 GDAL 3 之后,配置 GDAL 之前需要先配置 SQLite 和 PROJ 库,因为 GDAL 在其 3.0 版本之后引入了对 SQLite 和 PROJ 的依赖。
-
SQLite 是一种嵌入式数据库,广泛用于移动应用和嵌入式系统中。GDAL 3 之后开始使用 SQLite 作为默认的虚拟文件系统(Virtual File System,VFS),用于支持对 SQLite 数据库的读取和写入。配置 SQLite 库后,可以确保 GDAL 正确地使用 SQLite VFS,从而支持从 SQLite 数据库中读取数据集。
-
PROJ 是一个开源的地理空间坐标参考系统库,用于处理地理坐标的投影、转换和坐标系转换等操作。GDAL 3 之后引入了对 PROJ 库的强制依赖,以支持在 GDAL 中进行地理空间坐标的投影和转换操作。配置 PROJ 库后,可以确保 GDAL 正确地使用 PROJ 库进行地理坐标的处理。
在配置 GDAL 时,需要先安装和配置 SQLite 和 PROJ 库,以满足 GDAL 对它们的依赖要求。这可以确保 GDAL 在运行时能够正确地访问和使用 SQLite 和 PROJ 功能,以支持地理空间数据的读取、处理和转换等操作。
二、具体配置
(一)SQLite配置
首先,我们进入SQLite
的官方下载网站(https://www.sqlite.org/download.html),并下载“Source Code”中的第一项sqlite-amalgamation-3410200.zip,以及“Precompiled Binaries for Windows”中的第二项sqlite-dll-win64-x64-3410200.zip与第三项sqlite-tools-win32-x86-3410200.zip,一共是三个文件,如下图所示。这里需要注意,随着SQLite
版本的更新,上述三个文件名称最后面的一长串数字会随着改变,大家只需要对照好文件名称前面的字样即可。
随后,将上述下载好的三个压缩包文件解压到同一个文件夹下,我的文件夹是C:\GDAL\SQLite。
随后,打开Visual Studio 2022,新建一个空项目。
随后,分别在“头文件”与“源文件”处右键,通过“添加”→“现有项...”的方法,将刚刚解压缩得到文件中的C:\GDAL\SQLite\sqlite-amalgamation-3410200\sqlite3.h与C:\GDAL\SQLite\sqlite-amalgamation-3410200\sqlite3ext.h
文件放入“头文件”,并将C:\GDAL\SQLite\sqlite-amalgamation-3410200\sqlite3.c
与C:\GDAL\SQLite\sqlite3.def
文件放入“源文件”。
添加后结果如图所示
接下来,接下来,选中项目名称MySQLite
,先在上方的“配置”与“平台”中将二者选择为“所有配置”与“所有平台”。在“C/C++”→“预处理器”中,右侧设置“预处理器定义”,点击“编辑”。
填入如下代码
_USRDLL
SQLITE_ENABLE_RTREE
SQLITE_ENABLE_COLUMN_METADATA
SQLITE_ENABLE_FTS5
SQLITE_ENABLE_UNLOCK_NOTIFY
接下来,在“链接器”→“输入”,在右侧配置“模块定义文件”。
找到刚刚解压缩得到的C:\GDAL\SQLite\sqlite3.def
文件,按下Shift
按钮并右键,选择“复制文件地址”,将其粘贴至“模块定义文件”中。
之后打开sqlite3.def
文件,在其最后一行添加如下的代码。
sqlite3_unlock_notify
然后选择“属性”→“配置属性”→“常规”,在右侧选择“配置类型”,将其选择为静态库(.lib)。(注意:改成.lib后左侧窗口的链接器会消失)
然后,点击“生成”---“生成解决方案”。(如果你需要Release版本的就在上方切换成Release,我这里是Debug版本)
可以看到,在Debug文件夹下面多出来三个文件
此时,在前面提到的SQLite
环境所下载的三个压缩包文件解压后所存放的文件夹中,我们新建三个文件夹,分别命名为include
、lib
与bin
。
随后,首先在刚刚生成的项目的x64\Debug
文件夹中,找到MySQLite.lib
文件。这里如果大家刚刚生成的是Release
版本的项目,那么就是在x64\Release文件夹中。
随后,将其复制到刚刚新建的lib
文件夹中。
然后, 将sqlite-amalgamation-3410200文件夹中的sqlite3.h
与sqlite3ext.h
文件复制。
将其粘贴至刚刚新建立的include
文件夹中。
随后,将sqlite-tools-win32-x86-3410200文件夹中的sqlite3.exe
文件复制。
粘贴至刚刚新建立的bin
文件夹中。
SQLite环境就配置完成了。
(二)CMake配置
接下来,我们开始对CMake软件进行配置。CMake软件是一个跨平台的编译软件,在后期进行PROJ
库配置时需要用到。
首先,我们还是在其官方下载网站(https://cmake.org/download/)进行软件的下载。这里我们下载其“Binary distributions”中的第一项即可。
安装的过程记得将CMake添加到环境变量,其他选项默认即可。
安装完毕即可。
(三)PROJ配置
1.配置PROJ库
接下来,我们开始PROJ
库的配置。PROJ
库是一个地理坐标转换库,用以处理不同的地理坐标数据;因为我们要安装的GDAL
库是一个地理数据处理库,因此其固然需要PROJ
这一地理坐标转换库来完成各项地理数据操作。
首先,我们在PROJ
库的官方下载网站(https://proj.org/download.html)中下载其源代码。
下载的时候注意不要点击到后面的md5,否则下载的文件是.md5结尾的
随后,将下载后的压缩包解压,并在解压后得到的文件夹中新建立一个build
文件夹。
接下来,打开我们刚刚安装好的CMake软件,并点击Browse Source选择我们的proj根目录,然后点击Browse Build,选择我们新建的build文件夹。随后,点击“Configue”
然后选择VS版本,我这里是2022;第二个选项选择处理器的架构(默认是AMD64,即x64),然后点击finish。
第一次运行会满屏红色错误
接下来,在CMAKE_INSTALL_PREFIX
中,配置一个我们后期将要存放PROJ
库的路径,我的路径是C:\GDAL;接下来的三个数据,我们分别选择前面配置SQLite
环境时,所得到的bin
文件夹中的sqlite3.exe
文件、include
文件夹与MySQLite.lib
文件的路径。具体配置如下图所示。
但是还是有错误提示!
查了下官方文档,这是官方的要求
但是查阅了一下,GDAL 库通常已经包含了对 libtiff 的依赖,并提供了对 TIFF 图像文件的支持。
GDAL 是一个功能强大的地理数据处理库,提供了对多种栅格和矢量地理数据格式的支持,包括 TIFF、JPEG、PNG 等常见格式。当安装了 GDAL 后,通常会自动包含对 libtiff 的依赖,并且可以通过 GDAL 的 API 接口直接读取和处理 TIFF 图像文件,而不需要单独安装 libtiff 库。因此,我们可以点击Advanced,把ENABLE_TIFF取消勾选。
但是,防止在使用 GDAL 和 OpenGL 过程中遇到了与 TIFF 图像文件相关的问题,例如无法读取或处理 TIFF 文件,可能需要检查 GDAL 和 OpenGL 配置,并确保其包含了对 libtiff 的正确依赖。如果在某些情况下,可能需要单独安装 libtiff 库就麻烦了,还是现在安装了比较好。
2.配置TIFF
下载最新版的libtiff库,然后解压
下载地址:Index of /libtiff/
然后打开CMake-gui,源码目录选择解压后的目录,并指定生成目录
点击Configure,选择对应的vs版本,其它选项不用修改,完成后最下方提示Configuring done。
然后点击Generate,提示Generating done。
关闭CMake-gui。
以管理员身份打开VS2022,打开项目,选择刚才在build目录生成的tiff.sln文件。
先生成ALL_BUILD
成功。
再生成INSTALL(注意:如果以非管理员打开VS2022,这一步会报错)。
成功生成到C盘。
3.继续配置PROJ库
再次打开CMake-gui,再次编译PROJ库,点击Advanced,把TIFF_INCLUDE_DIR和TIFF_LIBRARY_DEBUG补上,再次点击Configure,这时又报出“Could NOT find CURL”的错误。
把ENABLE_CURL取消勾选,再次点击Configure。
又发出错误提示:projsync requires Curl
然后取消勾选“BUILD_PROJSYNC”,再次点击Configure。
成功。
点击Generate,成功。
这时可以关闭CMake-gui了。
在开始菜单中找到位于Visual Studio 2022软件下的“x64 Native Tools Command Prompt for VS 2022”软件,点击打开。
进入到PROJ的build目录。
执行命令
msbuild ALL_BUILD.vcxproj /p:Configuration="Release"
如果需要编译Debug版本的库,将Release修改为Debug即可。
但是,推荐选择Release,为什么呢?
因为如果选择了Debug,那么再下一步执行"msbuild INSTALL.vcxproj /p:Configuration="Debug",不管是Debug还是Release,都会产生错误。
而且,即使选择的是Release,在Visual Studio软件中无论是Release
模式还是Debug
模式,都可以成功调用配置好的Release
版本的GDAL
库。
成功后会显示0个错误,警告的出现并不影响。
继续输入以下代码。
msbuild INSTALL.vcxproj /p:Configuration="Release"
成功。
此时,前面提到我们在CMake软件中设置了CMAKE_INSTALL_PREFIX
所对应的文件夹路径,我的路径是C:\GDAL
在这个路径中,此时我们可以看到其已经自动生成了bin
、include
、lib
与share
四个文件夹。
这就完成了PROJ库的配置。
(四)GDAL配置
首先,依然是在其官方下载网站(https://gdal.org/download.html)中进行源代码的下载。
也可以去github下载:Releases · OSGeo/gdal · GitHub
这里下载3.5.3版本,因为在此之后的版本中没有nmake.opt文件,配置起来比较麻烦。
然后解压。
随后,找到其中的nmake.opt
文件,并用能够打开文本的软件打开(Visual Studio软件也可以)。
随后,在其42
行左右(具体行数可能会随着GDAL
库版本的不同而不同)的位置,将等号后的数字修改为自己Visual Studio软件的_MSC_VER
值。如果大家不知道自己Visual Studio软件的这一个值是多少,可以参考文章Visual Studio软件_MSC_VER数值(MSVC编译器版本)的获取。
接下来,在66
行左右的位置,将这一路径设置为自己希望编译后GDAL
库存放的路径。
随后,在130
行左右的位置,如果大家需要编译的是Debug
版本的GDAL
库,则将等号后的数字修改为1
即可;需要编译的是Release
版本的GDAL
库,就不用修改。
随后,在213
行左右的位置,如果我们的电脑是64
位的Windows系统,就将这一行的注释取消掉即可。
接下来,在245
行左右的位置,如果需要动态编译就不用修改,如果需要静态编译就将等号后的数字修改为0
。一般我们选择静态编译即可,因此将其修改为0
。
接下来,在265
行左右,需要我们配置PROJ
库的一些路径。
其中,第265行是前面我们在CMake软件中设置了CMAKE_INSTALL_PREFIX
所对应的文件夹路径下,include
文件夹的路径;第269行是这一文件夹中,lib
文件夹中proj.lib
文件的路径。配置成功如下图所示。
最后,在638
行左右,需要我们配置SQLite
环境的一些路径。原配置如下。
其中,这里所涉及的文件夹,是前面提到的下载的SQLite压缩包文件解压后所存放的文件夹中,我们新建的、分别命名为include
、lib
与bin
的那三个文件夹。其中,将include
文件夹的路径放在第一个位置,将lib
文件夹中的MySQLite.lib
文件的路径放在第二个位置。
配置完毕如图所示,如果你不需要使用SQLite,就可以保留注释。
随后,保存当前nmake.opt
文件,并再一次打开“x64 Native Tools Command Prompt for VS 2022”软件,cd进入刚刚解压得到的GDAL
库文件夹(也就是nmake.opt
文件所在的那个文件夹,这一文件夹下还有一个名为makefile.vc
的文件,如下图所示)。
如果需要的是Debug
版本的GDAL
库,直接分别输入并运行以下三句代码即可。
nmake /f makefile.vc WIN64=YES DEBUG=1
nmake /f makefile.vc install
nmake /f makefile.vc devinstall
结果分别如下图所示。
如果需要的是Release版本的GDAL库,那么分别输入并运行以下两句代码即可。
nmake /f makefile.vc
nmake /f makefile.vc devinstall
此时,在我们刚刚于nmake.opt
文件66
行左右处所设定的GDAL
库存放路径中,可以看到已经自动生成了相关的文件夹,如下图所示。
GDAL配置完成。
三、效果测试
新建一个C++的空项目,在源文件右键---添加---新建项。新建一个C++源文件,我这里新建的文件名为main.cpp。
在main.cpp中添加如下代码。
#include <iostream>
#include <gdal.h>
#include <gdal_priv.h>
using namespace std;
int main() {
GDALDataset* poDataset;
GDALAllRegister();
poDataset = (GDALDataset*)GDALOpen("pic.tif", GA_ReadOnly);
if (poDataset == NULL)
{
cout << "找不到文件,但说明GDAL可以用了";
}
return 0;
}
然后我们还需要把GDAL库导入一下。
首先,在项目名称那右键点击属性,然后点击C/C++下面的常规,在右侧的包含附加目录点击编辑(我这里已经编辑好了)。
把之前在nmake.opt的第66行设置的GDAL库目录下面的include文件夹所在路径填进来
然后点击链接器---常规---附加库目录进行编辑。
把之前在nmake.opt的第66行设置的GDAL库目录下面的lib文件夹所在路径填进来
然后点击链接器---输入---附加依赖项,进行编辑
把之前在nmake.opt的第66行设置的GDAL库目录下面的lib文件夹下的gdal.lib文件所在路径添加进来(可以把鼠标光标放在gdal.lib文件,然后按shift+鼠标右键,然后松开,再按A键快速复制文件路径)。
然后确定保存即可。
点击本地Windows调试器,编译运行此代码。
但是不出意外的话又要出意外了。
对于此错误,我们需要把刚刚于nmake.opt
文件66
行左右处所设定的GDAL
库存放路径中的bin
文件夹,分别放于系统变量的PATH
中,然后重启电脑。
为什么要放到系统变量的PATH中呢?放到用户变量的PATH中可以吗?答案是当然可以。区别在于,对于普通变量,用户变量的优先级大于系统变量;如果变量名相同,则用户变量中的内容会替换掉系统变量中的内容。
但是对于PATH,系统变量的优先级要大于用户变量。
还有一个区别是,用户变量只对当前登录的用户有效(换言之,如果换一个账户登录这台电脑就用不了其他账户设置的用户变量),而系统变量是对所有用户都有效!
详情可参考这三篇文章
VS环境下,关于“找不到 **.dll,无法执行代码,重新安装程序可能会解决此问题。”的四种解决方案_找不到emp.dll,无法继续执行代码_Vete.的博客-CSDN博客
windows下用户变量和系统变量的优先级_系统变量和用户变量优先级_SJ2050的博客-CSDN博客
Windows 10 / 11 环境变量 (用户变量与系统变量)_Yongqiang Cheng的博客-CSDN博客
最后设置完毕的结果是这样的。
然后重启电脑。
打开VS2022,继续运行刚才新建的项目。
又提示这个错误,唉。。。。
照葫芦画瓢,把tiffd.dll的存放路径也添加到系统变量的PATH中。(在上面配置LIBTIFF的时候,生成INSTALL完毕后可以看到在C盘的Program Files(x86)下生成了tiff文件夹)
然后确定保存,重启电脑。
再次运行上面新建的项目。
成功。
GDAL这就配置完成啦。
参考文章
GDAL库在Visual Studio C++环境中的配置 - 简书
windows下编译proj库_proj编译_lxmeng的博客-CSDN博客
WIN10 VS2019下编译GDAL3.0+PROJ6+SQLite_win安装proj6_Zzzxs-的博客-CSDN博客