【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插件驱动

 

转载请注明原文地址:https://www.cnblogs.com/litou/p/15720236.html

一、介绍

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://github.com/Esri/file-geodatabase-api

这里使用VS2015编译,故下载FileGDB_API_1_5_1-VS2015.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中创建文件夹filegdb151x86,将相关类库文件复制并组织如下:

C:\gdal\plugins\filegdb151x86
+-- 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/filegdb151x86"

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\filegdb151x86\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、调用注意事项

1)打开数据源: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)。

2)目前驱动只支持MDSYS.SDO_GEOMETRY格式的图形对象,不支持SDE.ST_GEOMETRY格式的图形对象。读取的时候可以通过MDSYS.SDO_GEOMETRY(SDE.ST_ASTEXT(SHAPE))将SDE.ST_GEOMERTY图形对象转换为MDSYS.SDO_GEOMETRY图形对象并被驱动识别,但写入时仍只能以MDSYS.SDO_GEOMETRY格式保存图形对象。若需要写入SDE.ST_GEOMERTY格式的图形对象,只能使用ArcGIS的SDK实现。

 

四、编译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。

转载请注明原文地址:https://www.cnblogs.com/litou/p/15720236.html

文章来源:https://www.cnblogs.com/litou/p/15720236.html

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
管理员
上一篇:记一次本地正常上线接口报404
下一篇:.NET Core定时任务(控制台程序)
评论列表

发表评论

评论内容
昵称:
关联文章

C#】C#使用GDAL3):Windows编译驱动
代码编辑使用
C# MEF化开发
Python Selenium使用火狐浏览器驱动
在cshtml文件使用编译语法
02.设备驱动安装
页面快排开发
页面快排配置支持图片上传
C# 使用Roslyn编译项目 .csproj
VS制作C#程序windows安装程序
OneNote安装代码高亮-NoteHightlight(2010-2013-2016)
C# Roslyn编译csproj项目 使用Roslyn编译整个C#项目
YES-CMS 内容管理系统 TinyMCE编辑演示
C# 7.0 - C# 7.3 的新增功能
YES-CMS内容管理系统扩展
C# ASP.NET Core开发学生信息管理系统(
C#使用Thrift作为RPC框架入门()之层架构
利用SelectPdf将网页生成PDF
vue3+vist 打包空白
.NET DLL反编译 JustDecompile

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码