【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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM