转载请注明原文地址: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下编译插件驱动的更多相关文章

  1. 在Windows下编译FFmpeg详细说明

    MinGW:一个可自由使用和自由发布的Windows特定头文件和使用GNC工具集导入库的集合,允许你生成本地的Windows程序而不需要第三方C运行时 MinGW,即 Minimalist GNU F ...

  2. 在Windows下编译OpenSSL(VS2005和VC6)

    需要说明的是请一定安装openssl-0.9.8a .  openssl-1.0.0我没有编译成功. 如何在Windows下编译OpenSSL (Vs2005使用Vc8的cl编译器)1.安装Activ ...

  3. windows下编译java源文件的编码错误

    import java.util.Arrays;public class ArrayAsAReference{ public static void main(String[] args) { int ...

  4. Windows下编译安装 FFmpeg

    在Linux/Mac下编译 ffmpeg是非常方便的.但要在 Windows下编译 ffmpeg还真要花点时间.以下就是在 Windowns下编译ffmpeg的步骤: 一.安装Cygwin 在wind ...

  5. 在Windows下编译Emacs

    在Windows下编译Emacs Windows下编译好的Emacs主要有两个版本,一个来自http://nqmacs.sourceforge.net/,另一个来自http://www.crasseu ...

  6. Windows下编译vpx获得各个项目VS2010解决方案的步骤

    最近研究了一下几种常见的视频编码器:x264,x265,vpx.本文简单记录一下它们的编译方法. x264,x265,vpx这三个开源的视频编码器可以说是当今“最火”的视频编码器.x264现在占据着H ...

  7. windows下编译调试nginx

    typora-copy-images-to: image windows下编译调试nginx linux使用gdb跟踪代码效率不高,在通过跟踪代码进行源码分析,与定位复杂逻辑问题时,如果有一个简单易用 ...

  8. 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 ...

  9. [转] Windows下编译OpenSSL

    简述 OpenSSL是一个开源的第三方库,它实现了SSL(Secure SocketLayer)和TLS(Transport Layer Security)协议,被广泛企业应用所采用.对于一般的开发人 ...

随机推荐

  1. 使用 Addressables 来管理资源

    使用 Addressables 来管理资源 一.安装 打开Package Manager,在Unity Technologies的目录下找到Addressables,更新或下载. 二.配置 依次打开W ...

  2. JavaScript设计模式,单例模式!

    单例设计模式:保证一个类仅有一个实例,并且提供一个访问它的全局访问点.有些对象只需要一个,这时可用单例模式. 传统的单例模式 和new 创建对象的调用不一样 调用者要调用xxx.getInstance ...

  3. 100个Shell脚本——【脚本3】tomcat启动脚本

    [脚本3]tomcat启动脚本 一.脚本tomcatd.sh #!/bin/bash # chkconfig:2345 64 36 # description: Tomcat start/stop/r ...

  4. KMP算法中的next函数

    原文链接:http://blog.csdn.net/joylnwang/article/details/6778316/ 其实后面大段的代码都可以不看 KMP的关键是next的产生 这里使用了中间变量 ...

  5. fastjson过滤多余字段

    /**     * Description:过滤实体中的字段     * @param src 需要过滤的对象,如 list,entity     * @param clazz 实体的class    ...

  6. JAVA序列化浅析

    java.io.Serializable浅析 Java API中java.io.Serializable接口源码: 1 public interface Serializable { 2 } 类通过实 ...

  7. springboot-MVC 过滤器使用

    一.前言 一下代码以SSO用户登录列子代码.完整代码https://gitee.com/xuxueli0323/xxl-sso 二.使用 2.1 创建过滤器 创建一个过滤器,实现Filter 接口 p ...

  8. Mysql实例 表设计

    目录 一.介绍 二.设计表格 三.查询 查都有哪些公司 查A公司都放了哪些广告 查A公司10月份该交多少广告费 四.分析 表结构设置 sql语句 其它功能 一.介绍 有一个公司叫月亮集团,他们旗下有很 ...

  9. 跨平台调用之WebService

    一.简介 web service是一种跨编程语言和跨操作系统平台的远程调用技术,是基于网络的.分布式的模块化组件. 跨编程语言就是说服务器端程序采用 Java 编写,客户端程序则可以采用其他编程语言编 ...

  10. 什么是git?

    目录 一.简介 Git与SVN 区别 一.简介 Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git 是 Linus Torvalds 为了帮助管理 Linux 内核 ...