轉載請注明原文地址: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/[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:password@ip:port/dbname,如postgresql://postgres:[email protected]:5432/postgres,
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/400280.html
標籤:C#
