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