GDAL(Geospatial Data Abstraction Library)是一个开源库,用来处理GIS里栅格和矢量数据,虽然本人并非GIS专业,但所处行业需要处理时空数据,所以接触到了。
而这次的任务,却是要验证GDAL原生C++运行性能,平时都是用Java、Python引用这个C++开发的库,现在遇到性能瓶颈,需要测试下GDAL本身的性能。
对于一个只在大学写过C语言版图书管理系统的C系列小白来说,这是一次挑战,不能辜负大家的希望。
分析问题所在:
我对Java、Python、js等语言很熟悉,C++语法也了解,只是C++编译起来比较麻烦,不像Java、Python import一个包就完事了。所以,只需要搞定这个编译环境,我也能愉快的玩耍C++大型项目。
IDEA已经用的很熟了,Clion虽然很好用,不过对CMake语法还不熟,还是最成熟傻瓜的VS作为开发C++首选吧。
所以我们使用VS开发。使用人家编译好的GDAL库。
下载安装VS
这里选择基础C++开发功能即可,大概9个多G,然后重启电脑。
下载GDAL依赖库
访问:https://www.gisinternals.com/release.php 下载,下载最新的64位即可。
要注意和VS的版本号对上,这里安装的2019版的。
我下载的地址是:
https://www.gisinternals.com/query.html?content=filelist&file=release-1928-x64-dev.zip
VS里引用GDAL库
要在VS里能够使用GDAL,需要引入。
首先,我们建一个空项目,然后开始配置。
选择项目 --》属性–》VC++目录
-
包含目录就是头文件目录,includes
-
库目录,就是lib下的 *.lib文件目录
然后在 链接器 --》输入 部分,配置 附加依赖项
gdal_i.lib
这个依赖是在链接阶段需要用到的库。
现在我们可以写主程序了
2个POLYGON做交集判断
#include <iostream>
using namespace std;
#include "gdal_priv.h"
#include "ogr_api.h"
int main1() {
std::cout << "Hello, World!" << std::endl;
OGRErr err_;
OGRGeometryH g1_;
OGRGeometryH g2_;
GDALAllRegister();
char* wkt1 = "POLYGON((0 0, 10 10, 10 0, 0 0))";
err_ = OGR_G_CreateFromWkt(&wkt1, NULL, &g1_);
cout << g1_ << endl;
char* wkt2 = "POLYGON((0 0, 0 10, 10 0, 0 0))";
err_ = OGR_G_CreateFromWkt(&wkt2, NULL, &g2_);
bool ok = OGR_G_Intersects(g1_, g2_);
cout << ok << endl;
OGR_G_DestroyGeometry(g1_);
OGR_G_DestroyGeometry(g2_);
return 0;
}
记得选成64位
现在编译链接是ok的,且可以生成执行文件
但运行时却找不到gdal303.dll
这是因为确实在该目录下找不到gdal的动态链接库,所以我们拷贝进来就行了。
然后,gdal.dll本身还依赖一堆库,我们直接把 上面下载的库里的 bin目录里的文件整个拷贝到和 生成的exe文件在同一目录。
现在就可以运行了。
发布
要发布release时,debug模式配的那些参数都没了,可以再配一遍。
GDAL API
开发更多程序,请参考GDAL官方API,比如矢量数据的读取和解析
https://gdal.org/tutorials/vector_api_tut.html
总结
这个就当做小白的第一次C++实战吧,之后遇到源码级项目,也可以直接上了,哪里需要我,哪里就有我。
转载:https://blog.csdn.net/jimo_lonely/article/details/117265247