摘要:由于以往的各種商業(yè)地理信息系統(tǒng)軟件平臺定義了不同的數(shù)據(jù)格式和數(shù)據(jù)組織方式,且其開發(fā)模式各不相同又相互獨立與封閉,以及常規(guī)商業(yè)GIS軟件的高費用在一定程度上限制了地理信息系統(tǒng)開發(fā)的大眾化發(fā)展。本文介紹基于開源軟件QGIS源碼在WINDOWS系統(tǒng)下編譯并進行二次開發(fā)的基本過程與方法,并給出地圖瀏覽與查詢系統(tǒng)開發(fā)實例,希望對相關的GIS系統(tǒng)開發(fā)者有一定的指導和借鑒作用。
關鍵詞:GIS QGIS 源碼編譯 二次開發(fā)
中圖分類號:P208
一、QGIS概述
GIS是目前IT領域的熱門話題,隨著Google earth等GIS系統(tǒng)的流行逐漸被越來越多的人所熟知。地理信息系統(tǒng)(GIS)是一個用于采集、存儲、處理、管理、分析、顯示和應用地理空間信息及其屬性數(shù)據(jù)的計算機系統(tǒng),現(xiàn)已廣泛地應用于環(huán)境監(jiān)測、災害分析預警與監(jiān)測、國土資源及人口調查、城市規(guī)劃等諸多領域。在計算機技術和全球信息網(wǎng)絡技術飛速發(fā)展的大環(huán)境下,GIS軟件技術體系迅猛發(fā)展。除了傳統(tǒng)的商業(yè)GIS軟件平臺外,眾多開源GIS也在為地理信息系統(tǒng)默默貢獻自己的力量。QGIS是基于跨平臺的QT軟件,采用C++語言開發(fā)的桌面地理信息系統(tǒng),因而其具有良好的跨平臺性,廣泛支持Linux、Windows、Unix和Mac OSX等操作系統(tǒng),這是其他諸多商業(yè)GIS軟件所不能企及的。最為重要的是QGIS為我們封裝了二次開發(fā)的API庫,通過引用各個類庫中的接口并配合動態(tài)庫的使用,可以方便地實現(xiàn)GIS功能,這使得開發(fā)者能夠將精力集中到解決應用程序中的業(yè)務邏輯中,而不是從頭開始開發(fā)GIS基本功能,方便開發(fā)者開發(fā)自己的GIS軟件[1]。
二QGIS的編譯及環(huán)境搭建
QGIS源碼及各種第三方依賴庫有不同的版本,開發(fā)者可基于自己的開發(fā)環(huán)境選擇不同的開發(fā)版本,本文介紹WIN10+QGIS2.8.9+VS2010+CMAKE3.2.3的編譯方法,其他版本與之類似。
(1)編譯所需要的工具及源碼:VS2010、qt-opensource-x86-vs2010-4.8.7、qt-vs-addin-1.1.11-opensource、OsGeo4W、CMAKE3.2.3、flex、bison和QGIS2.8.9源碼。
(2)安裝好工具之后,使用OsGeo4W下載安裝編譯所需的第三方庫,需要安裝的有:-expat、-fcgi、-gdal、-grass、-gsl-devel、-iconv、-pyqt4、-qt4-deve、-qwt-devel-qt4、-qwt-libs-qt4、-sip、-spatialite、-libspatialindex-devel、-Python-qscintilla、-qgis-ltr-common、-qgis-common。OsGeo4W包含了許多第三方庫文件,我們在安裝時只需要選擇所需的庫文件進行下載安裝,完全裝好后提示重啟電腦,將下載安裝的庫文件加入環(huán)境變量后即可進行源碼的編譯。
(3)使用cmake打開源碼文件夾,將CMakeLists.txt拖入cmake中點擊configure開始編譯,編譯可能會出現(xiàn)大量紅色警告,這里的錯誤大多是路徑問題,如果出現(xiàn)了錯誤,必須進行修改否則之后的編譯將不能通過,我們只需將庫文件的路徑修改為自己安裝好的路徑,即可正確編譯。
(4)在cmake編譯沒有出錯的情況下,會在build文件夾下生成sln解決方案,使用VS2010打開源碼即可編譯生成,進行二次開發(fā)我們只需生成以下8個項目即可進行開發(fā):ui、qgis_core、qgis_analysis、qgis_gui、qgis_app、qgis、ogrprovider、gdalprovider。編譯生成一系列的動態(tài)庫lib文件,開發(fā)者即可使用QGIS的lib庫文件配合include頭文件和bin動態(tài)鏈接庫文件進行二次開發(fā)。
三、QGIS開發(fā)實例
3.1 顯示數(shù)據(jù)
使用VS新建qt application,配置開發(fā)環(huán)境屬性,注意加載xml模塊,然后借助于QGIS開發(fā)文檔等相關資料即可進行代碼的編寫。QGIS提供了地圖畫布類mapcanvas能實現(xiàn)數(shù)據(jù)視圖,借助QgsVectorLayer、QgsRaster、addMapLayer、setExtent、setLayerSet、setVisible等API函數(shù)即可實現(xiàn)矢量與柵格數(shù)據(jù)圖層的加載與顯示。除了顯示數(shù)據(jù)外,我們通過在類中使用initLayerTreeView、createContextMenu、setMapTool、panMode、ZoomInMode、ZoomOutMode、ZoomFullMode等一系列API函數(shù)實現(xiàn)圖層管理器和視圖窗口的漫游縮放等基本地圖操作與顯示功能。
3.2 屬性數(shù)據(jù)的查看
屬性表是開發(fā)一個GIS系統(tǒng)必備的功能,通過屬性表用戶能夠進行空間分析、查詢等操作,正是因為GIS矢量數(shù)據(jù)包含各種屬性信息,才使得GIS矢量圖形與普通的圖形具有本質的區(qū)別。QGIS中提供了以下幾個與屬性表相關的類:
QgsVectorLayerCache、QgsEditorWidgetRegistry、QgsAttributeTableView、QgsAttributeTableModel。其中后兩個類是按照Qt的MVC架構來創(chuàng)建的。Model用來存儲數(shù)據(jù),而View則是向用戶顯示的視口。
3.3柵格圖像的增強顯示
對于柵格圖像的增強顯示及操作,是一個GIS軟件的基本功能。QGIS依賴于GDAL插件庫能夠實現(xiàn)顯示多種格式的柵格影像,如常見的遙感圖像格式ENVI Image、GeoTIF等。QGIS的二次開發(fā)API中同樣提供了調整柵格圖像對比度、亮度以及拉伸增強顯示等基本功能接口。通過setContentrastEnhancement函數(shù)實現(xiàn)對比度和亮度的控制,QGIS中通過QgsBrightnessContrastFilter類對象來控制柵格圖像亮度和對比度,只需在類中定義這樣一個對象,即可通過函數(shù)實現(xiàn)柵格圖像的增強顯示。
四、結語
不同于傳統(tǒng)的商業(yè)GIS平臺軟件,開源GIS軟件無需擔心數(shù)據(jù)格式兼容、軟件開發(fā)使用成本等問題,開發(fā)者能夠將精力集中于應用軟件的業(yè)務模塊開發(fā)而無需從GIS基本操作入手[5]。因此,開源GIS軟件功能很普遍很強,技術也非常先進,因為其背后是來自眾多技術狂熱者和學院研究者的大力支持。QGIS以其擁有的幾十個核心插件和大量的外部擴展插件以及它跨平臺的優(yōu)良特性,為各個領域的地理信息應用提供開發(fā)平臺[6]。本文通過對開源QGIS源碼的編譯及二次開發(fā)方法的研究,為開發(fā)人員提供了QGIS開發(fā)的技術路線。開發(fā)者可根據(jù)不同的需求來進行二次開發(fā)和插件的開發(fā),并能編寫相應的接口,為自己的GIS應用軟件服務。
參考文獻:
[1]鄧欣,寧芊.基于開源的分布式山洪監(jiān)測數(shù)據(jù)系統(tǒng)設計[J].計算機測量與控制,2016,24(10):54-56.DOI:10.16526/j.cnki.11-4762/tp.2016.10.016.
[2]朱浩.開源GIS支持下的災害風險區(qū)劃分析研究[D].中國石油大學(華東),2012.[2017-10-13].
作者簡介:
黃善春(1997.01-)男,漢族,身份證號:411524199701051473,本科生,河南信陽,研究方向:地理信息科學