關於基於GDAL庫QT軟體平臺下C++語言開發使用說明
背景前提
地理空間資料抽象庫(GDAL)是一個用於讀取和編寫柵格和向量地理空間資料格式的計算機軟體庫,由開源地理空間基金會在許可的X / MIT風格免費軟體許可下發布。 作為一個庫,它為呼叫應用程式提供了一個抽象資料模型,用於所有支援的格式。 它還可以構建有各種有用的命令列介面實用程式,用於資料轉換和處理。 PROJ.4庫支援投影和轉換。(摘自維基百科)
相關的OGR庫(OGR Simple Features Library [2])是GDAL原始碼樹的一部分,它為簡單的特徵向量圖形資料提供了類似的功能。(摘自維基百科)
GDAL庫在使用前可以進行原始碼編譯,編譯環境由使用者所要進行後期的開發環境所決定,一般情況下,Windows系統下和Linux系統下所編譯出來的GDAL庫檔案是不一樣的,不僅如此,對於C++語言來說,不同編譯器下的編譯出來的GDAL庫檔案也是不一樣的,例如QT所採用的MinGW編譯器和VS的MSVC編譯器所編譯出來Windows系統下的GDAL庫檔案不通用(本人親測,確實如此),所以不同的開發環境,不同的開發平臺(IDE),不同的編譯器,這都會影響前期的GDAL庫原始碼的編譯,再加上GDAL庫本身又支援多種擴充套件庫,以及多種語言下的二次編譯,不同的使用者有不同的擴充套件需求,所以針對GDAL庫的複雜需求,配置不同的編譯環境,編譯出來的GDAL庫檔案也是各式各樣,這可能也是開源地理空間基金會的GDAL / OGR專案管理委員會之所以進行開源的原因。
適用環境(開發)
這裡主要介紹前期隨筆中所提到的基於GDAL庫所適用的開發環境,以及是如何使用的,當然這裡只是做一下簡要的總結,至於具體的函式使用,以及庫檔案的編譯,推薦大家可以去買一本李民錄老師的《GDAL庫原始碼剖析與開發指南》(說明:不是打廣告,我也沒收李老師一分錢,這裡只是出於對初學者的一個建議)。
本文GDAL庫所採用的是QT軟體平臺下的MSVC 2017 x64編譯器進行編譯,編譯出來的庫檔案也只能用於Windows系統下QT(MSVC)軟體平臺進行開發。編譯過程中為了支援.nc等NetCDF型別檔案的讀取與寫入,以及包括高斯投影在內的大部分投影功能,特地加入了netCDF(4.6.2)和proj4(4.9.3)庫檔案進行聯合編譯,編譯出來以後經過測試,可以正常使用。
使用方法
這裡只介紹基於Qt軟體下MSVC編譯器進行GDAL庫使用環境的配置。編譯後的檔案主要有三個:GDAL232、netCDF_462、proj493
每一個資料夾內部都包含各自庫本身所具有的bin檔案、include檔案、lib檔案,bin檔案主要是Windows程式執行時與系統進行互動的執行環境檔案,lib是程式進行編譯時的庫檔案,include檔案是編寫時的宣告檔案。下面主要說一下如何進行配置。
首先進行系統環境變數的配置,環境變數的配置方法自行百度,只不過內容不一樣,配置的變數名稱為系統環境下的Path變數(PS:很多人初學者曾經問過我,為什麼不在使用者環境變數中的Path裡面配置,這個我做一點解釋,就是使用者環境變數與系統環境變數的區別,使用者環境變數裡面的內容只有該使用者登陸Windows系統進行使用時才有效,其他使用者沒有,但是系統環境變數就區別於這一點,它是所有使用者都生效),具體配置結果如下:
配置完環境變數完成以後進行測試一下,開啟cmd命令列,輸入gdalinfo命令,如果顯示如下
則說明配置成功,如果不是,則失敗,檢查相關錯誤。配置成功以後再進行編譯環境的配置,開啟Qt軟體,新建Qt專案,右擊專案名稱,匯入外部庫檔案,選擇GDAL庫lib資料夾中的.lib檔案,選擇完成後,如下圖所示:
點選確定以後,.pro檔案中多處這幾行文字表示新增成功,具體如下圖所示:
同樣的步驟將netCDF庫和proj4庫同樣新增進來,新增的lib檔案分別是netcdf.lib,proj_i.lib和proj.lib三個檔案。新增以後的內容如下:
新增完成以後,即可進行程式碼的書寫開發。具體開發步驟和內容參考上文所說的《GDAL庫原始碼剖析與開發指南》一書,或者去檢視李民錄老師相關博文(博文主頁:https://blog.csdn.net/liminlu0314)。
結束語
本文主要是針對前期所發博文中所採用的庫檔案的前提介紹,也是對之前博文的補充說明,與此同時,為了擴大方便大家的使用,此處公開我之前專案檔案中所使用的GDAL庫檔案,下載連線:https://files.cnblogs.com/files/thyou/GDAL.7z,希望對相關讀者有一定的幫助。本文中所採用的GDAL庫及擴充套件庫所採用的原始碼均為官網最新版編譯出來的,編譯時間為2018年9月20日。
致謝
從一開始的啥也不懂,編譯庫檔案,到擴充套件其他語言版本,再到現在C++與Java語言下GDAL庫的熟練使用,李老師以及相關的技術博主給予我分享了太多的經驗知識,雖然學習的道路中充滿荊棘,但是還是走過來了,這裡要衷心的感謝你們,謝謝!