【C#】C#中使用GDAL3(三):Windows下编译插件驱动
转载请注明原文地址:https://www.cnblogs.com/litou/p/15720236.html
本文为《C#中使用GDAL3》的第三篇,总目录地址:https://www.cnblogs.com/litou/p/15004877.html
| 本文目录 |
| 一、介绍 |
| 二、编译FileGDB插件驱动 |
| 三、编译Oracle插件驱动 |
| 四、编译PostgreSQL插件驱动 |
一、介绍
GDAL的驱动分为内置驱动和插件驱动两类。内置驱动即GDAL编译完成后已经内置支持的类型数据(如ESRI Shapefile / DBF),插件驱动即需要引用第三方类库编译才能支持类型数据(如Oracle Spatial)。
通过官方网址https://gdal.org/drivers/vector/index.html,可以查询GDAL所支持的矢量数据驱动名称、是否可以创建、依赖的类库等信息。

通过ogrinfo命令可以列出当前已注册的矢量数据驱动情况(除该命令外还有gdalinfo、gdalsrsinfo、gdallocationinfo等查询信息命令)。打开命令提示符,执行cd C:\gdal\gdal-3.4.0\output\bin,再执行ogrinfo --formats。

列出的标识说明如下:
1)raster:支持栅格数据
2)vector:支持矢量数据
3)ro:只读
4)rw:支持读、写
5)rw+:支持读、写和更新
6)v:支持虚拟读写
7)s:支持数据子集
对于插件驱动的编译方法,只需要准备好第三方类库,并在GDAL的编译选项中配置好对应插件驱动的参数路径即可。
二、编译FileGDB插件驱动
1、驱动情况
通过官方网页可以看到,支持ESRI File Geodatabase数据的插件有两个,一个是内置驱动OpenFileGDB(只读),一个是插件驱动FileGDB(支持读写)。两个驱动的对比详见https://gdal.org/drivers/vector/openfilegdb.html#comparison-with-the-filegdb-driver。

下面开始编译插件驱动FileGDB,官方网址:https://gdal.org/drivers/vector/filegdb.html
2、准备插件驱动类库文件
为方便编译,在C:\gdal中创建文件夹plugins,用于存放编译所需要的第三方类库文件。
插件驱动所需要的类库文件下载网址:https://appsforms.esri.com/products/download/#File_Geodatabase_API_1.3。
下载filegdb_api_vs2013_1_4.zip并解压,插件驱动所需要的类库文件路径如下:
1)编译需要头文件:include
2)编译需要库文件:lib\FileGDBAPI.lib(32位),lib64\FileGDBAPI.lib(64位)
3)运行需要动态链接库:bin\FileGDBAPI.dll(32位),bin64\FileGDBAPI.dll(64位)
这里以编译32位驱动为例,在C:\gdal\plugins中创建文件夹filegdb14x86,将相关类库文件复制并组织如下:
C:\gdal\plugins\filegdb14x86
+-- include
+-- lib -- FileGDBAPI.lib
+-- bin -- FileGDBAPI.dll
注意:编译32位的插件驱动需要32位的类库文件,编译64位的插件驱动同理。
2、修改nmake.opt
用文本编辑工具,打开C:\gdal\gdal-3.4.0下的nmake.opt文件,并修改以下键的值:
1)718行处FGDB_ENABLED,去掉前面的#号。
2)719行处FGDB_PLUGIN,去掉前面的#号。
3)720行处FGDB_SDK,去掉前面的#号,值改为"C:/gdal/plugins/oracle11gx86"
4)721行处FGDB_INC,去掉前面的#号。
5)722行处FGDB_LIB,去掉前面的#号。
3、编译生成结果
1)打开"VS2015 本机工具命令提示符"
a)32位:开始菜单->"Visual Studio 2015"->"Visual Studio Tools"->"Windows Desktop Command Prompts"->"VS2015 x86 本机工具命令提示符"。
b)64位:开始菜单->"Visual Studio 2015"->"Visual Studio Tools"->"Windows Desktop Command Prompts"->"VS2015 x64 本机工具命令提示符"。
2)执行cd C:\gdal\gdal-3.4.0\ogr\ogrsf_frmts\filegdb,定位到插件驱动的源码目录。
3)执行下面编译命令,结果存放在C:\gdal\gdal-3.4.0\output\bin\gdalplugins,生成文件ogr_FileGDB.dll。
a)32位:先执行nmake /f makefile.vc plugin,再执行nmake /f makefile.vc plugin-install。
b)64位:先执行nmake /f makefile.vc plugin WIN64=1,再执行nmake /f makefile.vc plugin-install WIN64=1。
c)默认情况下是Release编译模式,如需要Debug编译模式,需加上DEBUG=1参数执行编译。

4、调用测试
打开命令提示符,执行cd C:\gdal\gdal-3.4.0\output\bin,定位到GDAL的程序目录,再执行ogrinfo --formats列出已注册的驱动情况,结果提示“找不到指定的模块”,说明插件驱动加载有问题。

出现这种情况是插件驱动没有找到依赖的动态链接库导致的,一般有两种解决方法:
1)将动态链接库复制到与执行程序(如orginfo)同级的目录。
2)将动态链接库所在目录添加到系统的路径环境变量中。
这里采用的是第二种方式,在命令提示符中执行set path=C:\gdal\plugins\filegdb14x86\bin;%path%,然后重新执行ogrinfo --formats,结果显示新的插件驱动已注册:"FileGDB -vector- (rw+): ESRI FileGDB"。

三、编译Oracle插件驱动
1、官方网址
https://gdal.org/drivers/vector/oci.html
2、准备类库文件
插件驱动所需要的类库文件包含在已安装的Oracle客户端(非InstantClient类型)或服务端中,文件路径如下:
1)编译需要头文件:%ORACLE_HOME%\oci\include
2)编译需要库文件:%ORACLE_HOME%\oci\lib
3)运行需要动态链接库:%ORACLE_HOME%\bin\oci.dll、%ORACLE_HOME%\instantclient\oraociei11.dll
这里以32位Oracle 11g客户端为例,在C:\gdal\plugins中创建文件夹oracle11gx86,将相关类库文件复制并组织如下:
C:\gdal\plugins\oracle11gx86
+-- oci
|---- include
|---- lib
+-- bin -- oci.dll
|---- oraociei11.dll
3、修改nmake.opt
用文本编辑工具,打开C:\gdal\gdal-3.4.0下的nmake.opt文件,并修改以下键的值:
1)704行处ORACLE_HOME,去掉前面的#号,值改为"C:/gdal/plugins/oracle11gx86"。
2)706行处OCI_PLUGIN,去掉前面的#号。
4、编译生成结果
1)打开"VS2015 本机工具命令提示符"
a)32位:开始菜单->"Visual Studio 2015"->"Visual Studio Tools"->"Windows Desktop Command Prompts"->"VS2015 x86 本机工具命令提示符"。
b)64位:开始菜单->"Visual Studio 2015"->"Visual Studio Tools"->"Windows Desktop Command Prompts"->"VS2015 x64 本机工具命令提示符"。
2)执行cd C:\gdal\gdal-3.4.0\ogr\ogrsf_frmts\oci,定位到插件驱动的源码目录。
3)执行下面编译命令,结果存放在C:\gdal\gdal-3.4.0\output\bin\gdalplugins。生成文件ogr_OCI.dll。
a)32位:先执行nmake /f makefile.vc plugin,再执行nmake /f makefile.vc plugin-install。
b)64位:先执行nmake /f makefile.vc plugin WIN64=1,再执行nmake /f makefile.vc plugin-install WIN64=1。
c)默认情况下是Release编译模式,如需要Debug编译模式,需加上DEBUG=1参数执行编译。

5、调用测试
打开命令提示符,执行cd C:\gdal\gdal-3.4.0\output\bin,定位到GDAL的程序目录,先执行set path=C:\gdal\plugins\oracle11gx86\bin;%path%设置系统路径环境变量,再执行ogrinfo --formats,结果显示新的插件驱动已注册:"OCI -vector- (rw+): Oracle Spatial"。

6、调用注意事项
打开数据源:Ogr.Open的路径参数格式为OCI:userid/password@database_instance:table,table,如OCI:system/123456@127.0.0.1/orcl:tb_layer1,tb_layer2。如果不指定表名列表,获取到的图层只限于ALL_SDO_GEOM_METADATA中记录的表名(相当于不能遍历所有图层,详见https://gdal.org/drivers/vector/oci.html#oracle-spatial)。
四、编译PostgreSQL插件驱动
1、官方网址
https://gdal.org/drivers/vector/pg.html
2、准备类库文件
插件驱动所需要的类库文件包含在已安装的PostgreSQL程序中,文件路径如下:
1)编译需要头文件:%PGHOME%\include
2)编译需要库文件:%PGHOME%\lib\libpq.lib
3)运行需要动态链接库:%PGHOME%\bin\libcrypto-1_1.dll、libiconv-2.dll、libintl-8.dll、libpq.dll、libssl-1_1.dll
这里以32位PostgreSQL 9.6为例,在C:\gdal\plugins中创建文件夹postgresql96x86,将相关类库文件复制并组织如下:
C:\gdal\plugins\postgresql96x86
+-- include
+-- lib -- libpq.lib
+-- bin -- libcrypto-1_1.dll
|---- libiconv-2.dll
|---- libintl-8.dll
|---- libpq.dll
|---- libssl-1_1.dll
3、修改nmake.opt
用文本编辑工具,打开C:\gdal\gdal-3.4.0下的nmake.opt文件,并修改以下键的值:
1)631行处PG_INC_DIR,去掉前面的#号,值改为"C:\gdal\plugins\postgresql96x86\include"。
2)632行处PG_LIB,去掉前面的#号,值改为"C:\gdal\plugins\postgresql96x86\lib\libpq.lib wsock32.lib"。
4、编译生成结果
1)打开"VS2015 本机工具命令提示符"
a)32位:开始菜单->"Visual Studio 2015"->"Visual Studio Tools"->"Windows Desktop Command Prompts"->"VS2015 x86 本机工具命令提示符"。
b)64位:开始菜单->"Visual Studio 2015"->"Visual Studio Tools"->"Windows Desktop Command Prompts"->"VS2015 x64 本机工具命令提示符"。
2)执行cd C:\gdal\gdal-3.4.0\ogr\ogrsf_frmts\pg,定位到插件驱动的源码目录。
3)执行下面编译命令,结果存放在C:\gdal\gdal-3.4.0\output\bin\gdalplugins。生成文件ogr_PG.dll。
a)32位:先执行nmake /f makefile.vc plugin,再执行nmake /f makefile.vc plugin-install。
b)64位:先执行nmake /f makefile.vc plugin WIN64=1,再执行nmake /f makefile.vc plugin-install WIN64=1。
c)默认情况下是Release编译模式,如需要Debug编译模式,需加上DEBUG=1参数执行编译。

5、调用测试
打开命令提示符,执行cd C:\gdal\gdal-3.4.0\output\bin,定位到GDAL的程序目录,先执行set path=C:\gdal\plugins\postgresql96x86\bin;%path%设置系统路径环境变量,再执行ogrinfo --formats,结果显示新的插件驱动已注册:"PostgreSQL -vector- (rw+): PostgreSQL/PostGIS"。

6、调用注意事项
打开数据源:Ogr.Open的路径参数格式为postgresql://user:password@ip:port/dbname,如postgresql://postgres:postgres@127.0.0.1:5432/postgres。
【C#】C#中使用GDAL3(三):Windows下编译插件驱动的更多相关文章
- 在Windows下编译FFmpeg详细说明
MinGW:一个可自由使用和自由发布的Windows特定头文件和使用GNC工具集导入库的集合,允许你生成本地的Windows程序而不需要第三方C运行时 MinGW,即 Minimalist GNU F ...
- 在Windows下编译OpenSSL(VS2005和VC6)
需要说明的是请一定安装openssl-0.9.8a . openssl-1.0.0我没有编译成功. 如何在Windows下编译OpenSSL (Vs2005使用Vc8的cl编译器)1.安装Activ ...
- windows下编译java源文件的编码错误
import java.util.Arrays;public class ArrayAsAReference{ public static void main(String[] args) { int ...
- Windows下编译安装 FFmpeg
在Linux/Mac下编译 ffmpeg是非常方便的.但要在 Windows下编译 ffmpeg还真要花点时间.以下就是在 Windowns下编译ffmpeg的步骤: 一.安装Cygwin 在wind ...
- 在Windows下编译Emacs
在Windows下编译Emacs Windows下编译好的Emacs主要有两个版本,一个来自http://nqmacs.sourceforge.net/,另一个来自http://www.crasseu ...
- Windows下编译vpx获得各个项目VS2010解决方案的步骤
最近研究了一下几种常见的视频编码器:x264,x265,vpx.本文简单记录一下它们的编译方法. x264,x265,vpx这三个开源的视频编码器可以说是当今“最火”的视频编码器.x264现在占据着H ...
- windows下编译调试nginx
typora-copy-images-to: image windows下编译调试nginx linux使用gdb跟踪代码效率不高,在通过跟踪代码进行源码分析,与定位复杂逻辑问题时,如果有一个简单易用 ...
- Windows下编译 Hadoop
Windows下编译 Hadoop-2.9.2 系统环境 系统: Windows 10 10.0_x64 maven: Apache Maven 3.6.0 jdk: jdk_1.8.0_201 Pr ...
- [转] Windows下编译OpenSSL
简述 OpenSSL是一个开源的第三方库,它实现了SSL(Secure SocketLayer)和TLS(Transport Layer Security)协议,被广泛企业应用所采用.对于一般的开发人 ...
随机推荐
- Scala(七)【异常处理】
目录 一.try-catch-finally 二.Try(表达式).getOrElse(异常出现返回的默认值) 三. 直接抛出异常 一.try-catch-finally 使用场景:在获取外部链接的时 ...
- 一起手写吧!ES5和ES6的继承机制!
原型 执行代码var o = new Object(); 此时o对象内部会存储一个指针,这个指针指向了Object.prototype,当执行o.toString()等方法(或访问其他属性)时,o会首 ...
- Maven 学习第一步[转载]
转载至:http://www.cnblogs.com/haippy/archive/2012/07/04/2576453.html 什么是 Maven?(摘自百度百科) Maven是Apache的一个 ...
- 查看IP访问量的shell脚本汇总
第一部分,1,查看TCP连接状态 netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn netstat -n | awk '/^tcp/ {++S[ ...
- idea maven 项目 遇到 "Module not specified" 解决方法
1. 原因:我这边出现的原因是 其他同事在提交代码是 将 这个文件夹也提交了,idea 会加载 .idea 里的配置(即 他的配置),而我的 maven 配置不同,导致出错. 2. 解决方法:删除这 ...
- mybtis入门
1.编写持久化对象 public class User { private String id;//用户编号 private String username;//用户名 private String ...
- B树和B+树原理图文解析
B树与B+树不同的地方在于插入是从底向上进行(当然查找与二叉树相同,都是从上往下) 二者都通常用于数据库和操作系统的文件系统中,非关系型数据库索引如mongoDB用的B树,大部分关系型数据库索引使用的 ...
- 为什么kafka和zk总是在一起?
一.概念 发布订阅,一个发布者发布到消息,所有订阅者都可以接收到 生产消费,一个消息对象只能被一个消费者消费 kafka是生产者,zookeeper是消费者 有3个微服务,聚合形成一个统一的业务层 但 ...
- Linux命令执行过程
目录 一.命令分类 二.命令执行顺序 三.命令分类及查找基本命令 四.命令执行过程 一.命令分类 Linux命令分为两类,具体为内部命令和外部命令 内部命令: 指shell内部集成的命令,此类命令无需 ...
- LuoguP7127 「RdOI R1」一次函数(function) 题解
Content 设 \(S_k\) 为直线 \(f(x)=kx+k-1\),直线 \(f(x)=(k+1)x+k\) 与 \(x\) 轴围成的三角形的面积.现在给出 \(t\) 组询问,每组询问给定一 ...