gdal聯合編譯C++版本proj.四、geos、hdf四、hdf五、netcdf

gdal聯合編譯C++版本proj.四、geos、hdf四、hdf五、netcdf

各依賴庫源代碼版本及下載地址

gdal

版本:2.4.4
下載地址:https://gdal.org/download.html
說明:下載的是源碼文件,也是本地聯合編譯的中心文件,其餘四個三方庫是融入到gdal中調用的

html

Proj.4

版本:4.9.3
下載地址:https://proj.org/download.html
說明:源碼文件,須要使用vs進行編譯,重要文件在src文件夾中

windows

geos

版本:3.7.3
下載地址:http://download.osgeo.org/geos
說明:源碼,須要使用vs進行編譯,重要文件是include文件夾和src文件夾下的geos_c_i.lib文件

api

HDF4

版本:4.2.6
下載地址:https://support.hdfgroup.org/ftp/HDF/releases/HDF4.2.6/bin/windows/
說明:是已經編譯好了的文件,也包含源碼,重要文件在dll文件夾中

工具

HDF5

版本:1.10.3
下載地址:https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/hdf5-1.10.3/bin/
說明:下載的文件解壓後是一個.msi文件,雙擊可安裝,安裝以後獲得一個文件夾,其中的內容和HDF4中的內容類似,重要文件在bin文件夾中

測試

netCDF

版本:4.7.2-NC4
下載地址: http://www.unidata.ucar.edu/downloads/netcdf/ftp/netCDF4.7.2-NC4-64.exe
說明:下載所得是一個.exe可執行文件,雙擊安裝以後獲得一個包含三個文件夾的文件夾,重要文件在bin當中

spa

編譯環境及工具版本

Windows x6四、vs2015 x64 本機工具提示符.net

編譯安裝

注:示例文件組織模式以下:
在這裏插入圖片描述
命令行

一、 編譯geos

進入geos文件夾,若是能夠找到autogen.bat和makefile.vc兩個文件,則證實文件夾正確,打開vs2015 x64 本機工具提示符,cd到geos文件夾,即autogen.bat和makefile.vc所在文件夾,前後運行autogen.bat和nmake /f makefile.vc src_dir3d

二、 編譯proj.4

cd轉到proj.4的文件夾,其中應該包含makefile.vc,運行nmake /f makefile.vc install-allcode

三、 修改gdal的編譯配置文件make.opt

  1. 進入gdal文件夾,找到make.opt文件並使用notepad++打開,修改gdal安裝路徑
    使用搜索工具,搜索GDAL_HOME,找到如57行的位置(不一樣版本位置可能會有差異),將值改成本身準備安裝gdal的文件夾
    在這裏插入圖片描述

  2. 修改編譯版本爲64位
    搜索win64,找到如191行的位置,去掉其前面的#號(#號表明註釋)
    在這裏插入圖片描述

  3. 集成geos數據讀取路徑
    搜索geos,找到如621~623行的位置,去掉前面的#號,將如621行GEOS_DIR的值修改成geos文件夾的路徑,如geos文件夾內的內容未作修改,可將622和623行中的內容修改成截圖所示
    在這裏插入圖片描述

  4. 集成HDF4數據讀取路徑
    搜索hdf4,找到如441~443行的位置,去掉前面的#號
    將441行HDF4_DIR修改成HDF4文件夾的路徑,其他內容與圖上一致,442行爲dll文件夾下的.lib文件列表,完整的內容爲:$(HDF4_DIR)\dll\hd426m.lib $(HDF4_DIR)\dll\hm426m.lib $(HDF4_DIR)\lib\hd426.lib $(HDF4_DIR)\lib\hm426.lib Ws2_32.lib
    在這裏插入圖片描述


  5. 集成HDF5數據讀取路徑
    搜索hdf5,找到如451~453行的位置,去掉前面的#號
    將452行HDF5_DIR的值修改成HDF5文件夾的路徑,其他內容與圖上一致,453行完整的內容爲:$(HDF5_DIR)\lib\hdf5_cpp.lib $(HDF5_DIR)\lib\hdf5_hl.lib $(HDF5_DIR)\lib\hdf5_hl_cpp.lib $(HDF5_DIR)\lib\hdf5_tools.lib $(HDF5_DIR)\lib\libhdf5.lib $(HDF5_DIR)\lib\libhdf5_cpp.lib $(HDF5_DIR)\lib\libhdf5_hl.lib $(HDF5_DIR)\lib\libhdf5_hl_cpp.lib $(HDF5_DIR)\lib\libszip.lib $(HDF5_DIR)\lib\libzlib.lib $(HDF5_DIR)\lib\szip.lib $(HDF5_DIR)\lib\zlib.lib
    在這裏插入圖片描述


  6. 集成netCDF數據讀取路徑
    搜索netcdf,找到如541~545行的位置,去掉前面的#號
    將544行NETCDF_LIB和545行NETCDF_INC_DIR中的D:\gdal-pgh45n替換爲netcdf所在的文件夾路徑,保證按照所寫路徑能夠找到netcdf.lib和include文件夾
    在這裏插入圖片描述


四、 編譯gdal

將vs2015 x64 本機工具cd轉到gdal文件夾,即make.opt所在文件夾,前後運行
nmake /f makefile.vc
nmake /f makefile.vc install
nmake /f makefile.vc devinstall
運行結束以後指定的安裝路徑下會出現以下的多個文件夾
在這裏插入圖片描述




編譯及運行過程當中可能出現的問題及對應的解決方法

1)、NMAKE:fatal error U1077. return code 0x460
工程中鏈接了一個lib文件,連接的時候卻出現不能解析的外部符號。大機率是32位和64位不兼容問題,也有多是包含的lib是錯的。能夠從如下幾個方面檢查:一、gdal的配置文件make.opt中的win64=yes是否打開以及是否將註釋符號去掉;二、vs工具提示符使用的版本不對,使用其餘版本的工具重試;三、參與編譯的文件存在32版本
2)、NMAKE:fatal error U1077. return code 0x49d
文件路徑不對,查詢到文件不存在,能夠返回到make.opt挨個檢查文件路徑是否準確,能夠沿着設置的路徑依次進入檢查,避免漏檢
3)運行安裝的gdal中的bin文件夾下的.exe提示缺乏某.dll文件,通常在某個依賴庫的bin文件或其餘文件下有該.dll文件,對於dpapi.dll的缺失能夠在網上搜索下載
4)當全部的.dll都不缺失後,運行上述.exe文件提示netcdf定位H5Literate失敗,這是因爲netcdf中的hdf5與gdal中引用的hdf5版本衝突致使的,筆者採用的辦法是尋找與netcdf中的gdf5中的同樣的hdf5引入到gdal中
注:gdal運行依賴庫所需的.dll文件
在這裏插入圖片描述






測試gdal是否正確聯合編譯其餘三方庫的命令

測試時採用dos命令行啓動.exe讀取或計算指定路徑下的文件,根據運行結果及提示信息判斷gdal是否正確集成對應的三方庫,所以在輸入測試命令前須要提早cd將當前路徑轉到安裝的gdal的bin文件夾下

測試hdf

命令:gdalinfo.exe 目標.HDF文件
提示該.HDF文件以下圖所示的各類數據信息則證實安裝成功,不然安裝失敗 在這裏插入圖片描述

測試proj.4

命令:gdalwarp.exe" -t_srs 「PROJCS[「WGS_1984_Web_Mercator_Auxiliary_Sphere」,GEOGCS[「GCS_WGS_1984」,DATUM[「D_WGS_1984」,SPHEROID[「WGS_1984」,6378137.0,298.257223563]],PRIMEM[「Greenwich」,0.0],UNIT[「Degree」,0.0174532925199433]],PROJECTION[「Mercator_Auxiliary_Sphere」],PARAMETER[「False_Easting」,0.0],PARAMETER[「False_Northing」,0.0],PARAMETER[「Central_Meridian」,0.0],PARAMETER[「Standard_Parallel_1」,0.0],PARAMETER[「Auxiliary_Sphere_Type」,0.0],UNIT[「Meter」,1.0],AUTHORITY[「Esri」,3857]]」 源tif文件 目標tif文件

測試netCDF

命令:gdalwarp.exe -t_srs 「+proj=latlong +datum=WGS84」 -te 112.0 28.4 116.7 32.3 -tr 0.05 0.05 -dstnodata -9999 -overwrite NETCDF:源.nc文件路徑:AOT_Merged 目標.nc文件路徑,如gdalwarp.exe -t_srs 「+proj=latlong +datum=WGS84」 -te 112.0 28.4 116.7 32.3 -tr 0.05 0.05 -dstnodata -9999 -overwrite NETCDF:F:\H08_20200727_0100_1HARP030_FLDK.02401_02401.nc:AOT_Merged F:\1.tif
錯誤提示:
1) 若提示ERROR 4: `NETCDF:F:\H08_20200727_0100_1HARP030_FLDK.02401_02401.nc:AOT_Merged’ does not exist in the file system, and is not recognized as a supported dataset name.說明netCDF和gdal版本不兼容,須要更換netcdf版本,筆者是由netCDF3更換爲了netCDF4解決了這個問題
2) 若出現如圖所示的提示
在這裏插入圖片描述



說明netCDF中的hdf5版本號是1.10.3,而gdal中的hdf5版本號是1.8.19,二者不一致,須要將gdal中的版本更換爲和netCDF中的同樣,即須要從新下載1.10.3版本的hdf聯合編譯gdal

附:
聯合編譯好的gdal.
單獨編譯好但還沒作集成的文件
徹底沒改動過的源文件

相關文章
相關標籤/搜索