GDAL3.8支持KML、LIBKML

本文详细指导如何在VS2022环境下使用CMAKE3.26.6编译GDAL3.8.1和LIBKML库,涉及资源准备、编译步骤、错误处理及使用,包括自定义编译expat、minizip和uriparser等第三方库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、环境准备

1、VS 2022

2、CMAKE 3.26.6

二、资源

1、gdal3.8.1源码

1、LIBKML源码

2、expat2.5.0源码

3、zlib1.3源码

三、编译

(一)GDAL3.8.1编译:

这里不详细介绍gdal3.8.1的编译,可以参考以下方法:

Visual Studio配置并编译C++环境下GDAL库、SQLite环境与PROJ库的方法_c++ proj-CSDN博客

(二)LIBKML库编译

1、源码下载

虽然下载的源码中带了所需的第三方库源码以及编译好的库,不过在链接gdal的时候会出现报错。

2、打开libkml.sln,开始编译

1)我这里使用的是自己编译的expat库,自带的expat也可以使用

expat源码下载:

填写好源码路径和构建路径,依次点击Configure、Generate、Open Project,打开后直接生成即可(x64):

2)如果出现无法打开某个文件,根据报错加上相应头文件路径即可。

3)如果出现错误提示是“error C2137: 空字符常量,需要在中间加个空格,也可参考这参考:GDAL集成对KML文件的支持_gdal 导出kml-CSDN博客支持中文字符

3、为防止gdal链接错误,下面工程需要添加一些文件一起编译

libkmldom:xal.h、xal.cc、gx_timeprimitive.h、gx_timeprimitive.cc、gx_tour.h、gx_tour.cc

libkmlbase: zip_file.h、zip_file.cc、uri_parser.cc、xml_namespaces.h、xml_namespaces.cc

libkmlengine:id_mapper.h、id_mapper.cc、find_xml_namespaces.h、find_xml_namespaces.cc

注:如果不加会出现以下错误

4、编译成功后得到相应的lib

(三)构建gdal扩展libkml

1、需在gdal初始构建成功基础下,需要填写proj库和tiff库,这里可以参考Visual Studio配置并编译C++环境下GDAL库、SQLite环境与PROJ库的方法_c++ proj-CSDN博客

2、填写EXPAT的信息

注:根据官方文档,集成了expat库还可以支持其他格式,不过并没有测试。 

3、查看源码libkml的CMakeList.txt,需要zlib库,这里使用libkml源码自带第三方库。

4、填写LIBKML信息,依次点击Configure、Generate、Open Project

LIBKML_BASE_LIBRARY:libkmlbase.lib

LIBKML_DOM_LIBRARY:libkmldom.lib

LIBKML_ENGINE_LIBRARY:libkmlengine.lib

LIBKML_INCLUDE_DIR = libkml2.2\src

LIBKML_MINIZIP_LIBRARY:minizip.lib

LIBKML_URIPARSER_LIBRARY:uriparser.lib

注:以上的lib填写需填写根据实际路径

5、打开构建目录里面的gdal.sln,右键ogr_LIBKML属性添加boost目录,这里可以先整理boost的头文件到同一目录下,就不需要这部操作。

6、开始编译

(四)编译报错

1、编译ALL_BUILD后会出现以下报错,需要重新编译libkml自带的第三方库

1)编译minizip.lib(x64)

创建静态库项目,删除默认的四个文件,属性设置不编译预编译头,添加源码文件,头文件和c文件。

编译报错,这个根据提示进行修改:

方法一:因为该版本VS认为这些函数是不安全,需要替换成安全函数,例如fopen->fopen_s。

方法二:添加预处理器定义:_CRT_SECURE_NO_WARNINGS

2)编译uriparser.lib(x64)

创建静态库项目,删除默认的四个文件,把include和lib文件添加到项目里,设置不编译预编译头生成即可。

3)编译zlib(x64)

源码下载:

使用cmake填写好源码路径和构建路径,依次点击Configure、Generate、Open Project,只生成zlib即可

 

2、如果租后出现这样错误,libkmlbase.lib工程设置不使用预编译头,重新编译。

9、编译结果

最后编译结果结果默认在C:\Program Files这个目录下,可以在gdal构建目录下的gdal.pc文件可以查看

(四)使用

1、把依赖的dll都添加到gdal编译目录bin下。

四、参考:

1、GDAL集成对KML文件的支持_gdal 导出kml-CSDN博客

2、Visual Studio配置并编译C++环境下GDAL库、SQLite环境与PROJ库的方法_c++ proj-CSDN博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值