李恩寧 楊雙 董曉寧 梁山清 葛紅志
摘要:在人防、公共安全及應(yīng)急救援等領(lǐng)域,客戶的系統(tǒng)平臺(tái)對(duì)于電子地圖的使用要求是不能聯(lián)網(wǎng),致使單機(jī)版電子地圖開發(fā)出現(xiàn)實(shí)現(xiàn)方法復(fù)雜、成本高等問題。在深入分析QT使用自帶的QGIS類庫和QT調(diào)用MapInfo插件的基礎(chǔ)上,總結(jié)出一種簡(jiǎn)便、可復(fù)用和免費(fèi)的實(shí)現(xiàn)方法。通過QT4.8圖形化開發(fā)工具實(shí)現(xiàn)了電子地圖軟件系統(tǒng)具有的所有基本功能,包括地圖加載、縮放、漫游及標(biāo)記顯示等,為今后做進(jìn)一步研究奠定了基礎(chǔ)。
關(guān)鍵詞:QT;Leaflet;電子地圖;單機(jī)版
中圖分類號(hào):TP18文獻(xiàn)標(biāo)志碼:A文章編號(hào):1008-1739(2020)14-58-4
0引言
近年來,地理信息系統(tǒng)[1-2]的應(yīng)用日趨廣泛,可以通過各種途徑接觸到電子地圖[3-5],例如Google地圖、Google Earth及百度地圖等網(wǎng)頁形式的電子地圖。人防、公共安全、應(yīng)急救援等多個(gè)領(lǐng)域的系統(tǒng)平臺(tái)建設(shè)對(duì)電子地圖的需求越來越多,而往往這些領(lǐng)域不能聯(lián)網(wǎng),需要單機(jī)運(yùn)行。
目前市面上的超圖等地圖廠家,對(duì)于PC端電子地圖的開發(fā)都是需要付費(fèi)的,用戶需要花大量費(fèi)用購買一套地圖開發(fā)庫及地圖數(shù)據(jù),這對(duì)于客戶來說,是一筆不小的開銷。
在探究各種電子地圖實(shí)現(xiàn)方法的基礎(chǔ)上,提出使用QT[6]結(jié)合Leaflet實(shí)現(xiàn)PC端單機(jī)版電子地圖的開發(fā),主要包括地圖的基本操作[7-8],如放大、縮小及平移等,地圖顯示目標(biāo)位置及地圖標(biāo)注等功能,能夠滿足用戶對(duì)于地圖開發(fā)的常用功能需求。
1 Leaflet
Leaflet[9-11]是一個(gè)為建設(shè)移動(dòng)設(shè)備友好的互動(dòng)地圖,而開發(fā)的開源的JavaScript庫,是由Vladimir Agafonkin帶領(lǐng)一個(gè)專業(yè)貢獻(xiàn)者團(tuán)隊(duì)開發(fā)的,雖然代碼僅有33 KB,但它具有開發(fā)在線地圖的大部分功能。
Leaflet設(shè)計(jì)堅(jiān)持簡(jiǎn)便、高性能和可用性好的理念,在所有主要桌面和移動(dòng)平臺(tái)能高效運(yùn)作。在現(xiàn)代瀏覽器上會(huì)利用HTML5和CSS3的優(yōu)勢(shì),同時(shí)也支持舊的瀏覽器訪問,支持插件擴(kuò)展,有一個(gè)友好、易于使用的API文檔和一個(gè)簡(jiǎn)單的、可讀的源代碼,是開源輕量級(jí)的JavaScript地圖庫,支持WMS、WFS、PostGIS等多源空間數(shù)據(jù)格式,具有跨平臺(tái)、易拓展及兼容性好等優(yōu)勢(shì)。
2 QT
QT[12]是1991年由QT Company開發(fā)的跨平臺(tái)C++圖形用戶界面應(yīng)用程序開發(fā)框架,既可用于開發(fā)GUI程序,也可用于開發(fā)非GUI程序,比如控制臺(tái)工具和服務(wù)器。QT是面向?qū)ο蟮目蚣埽褂锰厥獾拇a生成擴(kuò)展以及一些宏,提供了一個(gè)完整的GUI程序解決方案及上百個(gè)功能強(qiáng)大的窗口部件,支持可視化開發(fā),并且易于使用,生成的代碼簡(jiǎn)潔而優(yōu)雅。
QGIS是開源的桌面地理信息系統(tǒng)軟件,是基于QT平臺(tái)使用C++開發(fā)出來的GIS軟件,主要特點(diǎn)是支持多種GIS數(shù)據(jù)文件格式、集成或支持其他開源GIS。GRASS、PostGIS和MapServer支持從WMS和WFS服務(wù)器獲取數(shù)據(jù)及通過插件支持功能擴(kuò)展。QGIS的優(yōu)點(diǎn)是開源、免費(fèi)、輕巧、跨平臺(tái)及支持多種數(shù)據(jù)格式與插件庫,缺點(diǎn)是功能弱小、穩(wěn)定性差。
QGIS+QT進(jìn)行二次開發(fā),環(huán)境的搭建非常復(fù)雜,需要到官網(wǎng)下載QGIS源碼進(jìn)行編譯,下載過程漫長(zhǎng),并且會(huì)下載很多依賴的庫,特別耗時(shí),對(duì)于項(xiàng)目周期短、項(xiàng)目任務(wù)緊急的情況,顯然這種技術(shù)方式不可取,即使下載下來,使用過程中還會(huì)有問題。
MapInfo[13-15]是個(gè)功能強(qiáng)大、操作簡(jiǎn)便的桌面地圖信息系統(tǒng),具有圖形的輸入與編輯、圖形的查詢與顯示、數(shù)據(jù)庫操作、空間分析和圖形的輸出等基本操作。不僅是一個(gè)可獨(dú)立運(yùn)行的軟件系統(tǒng),還可通過ActiveX組件方式集成到用戶程序中,為用戶程序提供電子地圖顯示和編輯功能。MapInfo的聯(lián)機(jī)幫助只提到了如何使用VB/VC++集成MapInfo,并沒有介紹QT中的使用方法。而且MapInfo的地圖格式是MIF,雖然網(wǎng)上能夠下載到,但是不全,而且不能保證是最新的,要得到最新的地圖數(shù)據(jù)需要花錢購買。
3 QT+Leaflet開發(fā)設(shè)計(jì)
3.1環(huán)境搭建
第1步:從QT官網(wǎng)下載并安裝qt-opensource-windowsx86-5.9.6.exe。在安裝過程中,選擇安裝組件時(shí),要選msvc2015 32-bit/msvc2015 64-bit;
第2步:下載Visual Studio 2015,并按照過程逐步安裝;
第3步:從Leaflet官網(wǎng)下載最新的庫;
第4步:運(yùn)行QT,自動(dòng)檢測(cè)出來的構(gòu)建套件為msvc2015-32bit,如果不是,則配置,如圖1所示。
3.2設(shè)計(jì)實(shí)現(xiàn)
3.2.1 QT初始化編碼實(shí)現(xiàn)
主要代碼流程如下:
①在.pro文件中,加入webengine類:QT+=webengine;
②工程代碼中編寫與LeafletMenu.html通信類bridge,并在bridge.h中定義與LeafletMenu.html交互的信號(hào)和槽函數(shù)。
3.2.2 LeafletMenu.html腳本文件的初始化編碼