C#中使用GDAL3(三):Windows下編譯外掛驅動

語言: CN / TW / HK

轉載請註明原文地址: 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/[email protected]_instance:table,table,如OCI:system/[email protected]/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:[email protected]:port/dbname,如postgresql://postgres:[email protected]:5432/postgres。