GDAL庫是一個跨平臺的柵格地理數據格式庫,包括讀取、寫入、轉換、處理各種柵格數據格式(有些特定的格式對一些操作如寫入等不支持)。它使用了一個單一的抽象數據模型就支持了大多數的柵格數據。 GDAL使用C++,在Visual studio環境下開發,對C,C++的支持當然不會有什麼問題。但對於C#、P ...
GDAL庫是一個跨平臺的柵格地理數據格式庫,包括讀取、寫入、轉換、處理各種柵格數據格式(有些特定的格式對一些操作如寫入等不支持)。它使用了一個單一的抽象數據模型就支持了大多數的柵格數據。
GDAL使用C++,在Visual studio環境下開發,對C,C++的支持當然不會有什麼問題。但對於C#、Python、Java來說,過程就相對繁瑣一些,對初學者造成了不少的麻煩。本文以GDAL2.2.4為例,詳細說明在CSharpe語言中使用GDAL的環境配置問題。
(1)下載gdal224.zip(或者gdal-2.2.4.tar.gz)源碼。下載地址:https://trac.osgeo.org/gdal/wiki/DownloadSource,下載解壓後放在本地。
MSVC_VER對應的版本如下:
MSVC_VER=1910 VS2017
MSVC_VER=1900 VS2015
MSVC_VER=1800 VS2013
MSVC_VER=1700 VS2012
MSVC_VER=1600 VS2010
MSVC_VER=1500 VS2008
(2)不同的gdal對應的swigwin的版本不同,打開解壓後的gdal-1.11.1\swig\csharp\gdal目錄下的GdalPINVOKE.cs文件,在文件開頭找到對應的swig版本,我下載的是swigwin-2.0.12版本,下載地址:https://sourceforge.net/projects/swig/files/swigwin/,下載解壓後放在本地。
(3)修改nmake.opt文件
創建安裝的目標文件夾“F:\gdal\gdal-run”,稍後的編譯配置中,我們將配置GDAL把編譯後將會安裝到這個文件夾內。
修改編譯配置文件夾“F:\gdal\gdal-2.2.4\nmake.opt”。以下是第41至第43行的內容:
!IFNDEF GDAL_HOME
GDAL_HOME = "C:\warmerda\bld"
!ENDIF
預設的情況下,GDAL將會安裝到"C:\warmerda\bld"文件夾內,為了更好地瞭解安裝過程,我們把第42行修改成如下內容:
GDAL_HOME = "F:\gdal\gdal-run"
設置swig的文件路徑,nmake.opt文件中為:
SWIG =swig.exe
將SWIG修改為下載的swigwin-2.0.12絕對文件名,例如:
SWIG=F:\gdal\swigwin-2.0.12\swig.exe
(4)使用“Visual Studio 2008 命令提示”工具來進行,(該工具位於“開始\程式\Microsoft Visual Studio 2008\Visual Studio Tools”內)。
打開“Visual Studio 2008 命令提示”工具
1.鍵入"cd F:\gdal\gdal-2.2.4",進入源文件所在的文件夾
2.依次執行:a) nmake /f makefile.vc //時間很長,耐心等待
b) nmake /f makefile.vc install //執行完畢後,F:\gdal\gdal-run文件夾下增加了bin,data,及html文件夾
c) nmake /f makefile.vc devinstall //執行完畢後,F:\gdal\gdal-run文件夾下增加了lib,include文件夾
這兩個文件夾主要用於C及C++的開發。
在"F:\gdal\gdal-run\bin"文件夾內已經生成了gdal202.dll文件,這是GDAL庫的核心,不管採用何種開發方式,最終都由這個DLL文件來執行實質性的操作。
(5)編譯C#源文件
1.鍵入"F:\gdal\gdal-2.2.4\swig\csharp",切到gdal源碼的swig/csharp目錄下。
2.執行如下命令:nmake /f makefile.vc interface
3.等待執行完後,先不要編譯,進入到swig/csharp目錄下,修改如下生成的源碼文件:
a)打開swig\csharp\gdal\GdalPINVOKE.cs文件 查找語句,大概位置都在188行
static GdalPINVOKE() {
}
會看到兩個一樣的語句,註釋掉其中一個
b)打開swig\csharp\ogr\OgrPINVOKE.cs 查找語句
static OgrPINVOKE() {
}
註釋掉其中一個
c)打開swig\csharp\ogr\OsrPINVOKE.cs 查找語句
static OsrPINVOKE() {
}
註釋掉其中一個
d)打開swig\csharp\osr\OsrPINVOKE.cs 查找語句
static OsrPINVOKE() {
}
註釋掉其中一個
4.然後分別打開如下三個文件,修改第17行
a)csharp\gdal\Band.cs文件:
public Band(IntPtr cPtr, bool cMemoryOwn, object parent) : base(GdalPINVOKE.Band_SWIGUpcast(cPtr), cMemoryOwn, parent)
b)csharp\gdal\Dataset.cs文件:
public Dataset(IntPtr cPtr, bool cMemoryOwn, object parent) : base(GdalPINVOKE.Dataset_SWIGUpcast(cPtr), cMemoryOwn, parent)
c)csharp\gdal\Driver.cs文件:
public Driver(IntPtr cPtr, bool cMemoryOwn, object parent) : base(GdalPINVOKE.Driver_SWIGUpcast(cPtr), cMemoryOwn, parent) {
5.完成修改後,切回到Visual Studio 2008 命令提示工具,切到gdal源碼的swig/csharp目錄下。
6.執行如下命令
a)nmake /f makefile.vc
b)nmake /f makefile.vc install
會把編譯出來的8個dll複製到安裝目錄下的csharp目錄下。
(7)在C#項目中,要將F:\gdal\gdal-run\bin目錄下的gdal202.dll,連同在F:\gdal\gdal-2.2.4\swig\csharp目錄生成的8個dll一起放到項目的Debug目錄下
新建一個VS2008的項目,添加對中4個含有"csharp"的DLL文件的引用。至此我們就可以使用GDAL的功能了。