李恩寧 楊雙 董曉寧 梁山清 葛紅志
摘要:在人防、公共安全及應急救援等領域,客戶的系統平臺對于電子地圖的使用要求是不能聯網,致使單機版電子地圖開發出現實現方法復雜、成本高等問題。在深入分析QT使用自帶的QGIS類庫和QT調用MapInfo插件的基礎上,總結出一種簡便、可復用和免費的實現方法。通過QT4.8圖形化開發工具實現了電子地圖軟件系統具有的所有基本功能,包括地圖加載、縮放、漫游及標記顯示等,為今后做進一步研究奠定了基礎。
關鍵詞:QT;Leaflet;電子地圖;單機版
中圖分類號:TP18文獻標志碼:A文章編號:1008-1739(2020)14-58-4

0引言
近年來,地理信息系統[1-2]的應用日趨廣泛,可以通過各種途徑接觸到電子地圖[3-5],例如Google地圖、Google Earth及百度地圖等網頁形式的電子地圖。人防、公共安全、應急救援等多個領域的系統平臺建設對電子地圖的需求越來越多,而往往這些領域不能聯網,需要單機運行。
目前市面上的超圖等地圖廠家,對于PC端電子地圖的開發都是需要付費的,用戶需要花大量費用購買一套地圖開發庫及地圖數據,這對于客戶來說,是一筆不小的開銷。
在探究各種電子地圖實現方法的基礎上,提出使用QT[6]結合Leaflet實現PC端單機版電子地圖的開發,主要包括地圖的基本操作[7-8],如放大、縮小及平移等,地圖顯示目標位置及地圖標注等功能,能夠滿足用戶對于地圖開發的常用功能需求。
1 Leaflet
Leaflet[9-11]是一個為建設移動設備友好的互動地圖,而開發的開源的JavaScript庫,是由Vladimir Agafonkin帶領一個專業貢獻者團隊開發的,雖然代碼僅有33 KB,但它具有開發在線地圖的大部分功能。
Leaflet設計堅持簡便、高性能和可用性好的理念,在所有主要桌面和移動平臺能高效運作。在現代瀏覽器上會利用HTML5和CSS3的優勢,同時也支持舊的瀏覽器訪問,支持插件擴展,有一個友好、易于使用的API文檔和一個簡單的、可讀的源代碼,是開源輕量級的JavaScript地圖庫,支持WMS、WFS、PostGIS等多源空間數據格式,具有跨平臺、易拓展及兼容性好等優勢。
2 QT
QT[12]是1991年由QT Company開發的跨平臺C++圖形用戶界面應用程序開發框架,既可用于開發GUI程序,也可用于開發非GUI程序,比如控制臺工具和服務器。QT是面向對象的框架,使用特殊的代碼生成擴展以及一些宏,提供了一個完整的GUI程序解決方案及上百個功能強大的窗口部件,支持可視化開發,并且易于使用,生成的代碼簡潔而優雅。
QGIS是開源的桌面地理信息系統軟件,是基于QT平臺使用C++開發出來的GIS軟件,主要特點是支持多種GIS數據文件格式、集成或支持其他開源GIS。GRASS、PostGIS和MapServer支持從WMS和WFS服務器獲取數據及通過插件支持功能擴展。QGIS的優點是開源、免費、輕巧、跨平臺及支持多種數據格式與插件庫,缺點是功能弱小、穩定性差。
QGIS+QT進行二次開發,環境的搭建非常復雜,需要到官網下載QGIS源碼進行編譯,下載過程漫長,并且會下載很多依賴的庫,特別耗時,對于項目周期短、項目任務緊急的情況,顯然這種技術方式不可取,即使下載下來,使用過程中還會有問題。
MapInfo[13-15]是個功能強大、操作簡便的桌面地圖信息系統,具有圖形的輸入與編輯、圖形的查詢與顯示、數據庫操作、空間分析和圖形的輸出等基本操作。不僅是一個可獨立運行的軟件系統,還可通過ActiveX組件方式集成到用戶程序中,為用戶程序提供電子地圖顯示和編輯功能。MapInfo的聯機幫助只提到了如何使用VB/VC++集成MapInfo,并沒有介紹QT中的使用方法。而且MapInfo的地圖格式是MIF,雖然網上能夠下載到,但是不全,而且不能保證是最新的,要得到最新的地圖數據需要花錢購買。
3 QT+Leaflet開發設計
3.1環境搭建
第1步:從QT官網下載并安裝qt-opensource-windowsx86-5.9.6.exe。在安裝過程中,選擇安裝組件時,要選msvc2015 32-bit/msvc2015 64-bit;
第2步:下載Visual Studio 2015,并按照過程逐步安裝;
第3步:從Leaflet官網下載最新的庫;
第4步:運行QT,自動檢測出來的構建套件為msvc2015-32bit,如果不是,則配置,如圖1所示。

3.2設計實現
3.2.1 QT初始化編碼實現
主要代碼流程如下:
①在.pro文件中,加入webengine類:QT+=webengine;
②工程代碼中編寫與LeafletMenu.html通信類bridge,并在bridge.h中定義與LeafletMenu.html交互的信號和槽函數。
3.2.2 LeafletMenu.html腳本文件的初始化編碼
