楊 珩,張桂芬
(1.上海市測繪院,上海 200063)
基于全開源架構(gòu)的互聯(lián)網(wǎng)地圖設(shè)計與應(yīng)用
楊 珩1,張桂芬1
(1.上海市測繪院,上海 200063)
介紹了一種基于全開源架構(gòu)的互聯(lián)網(wǎng)地圖解決方案;詳細闡述了該架構(gòu)所使用的技術(shù)棧,包括非關(guān)系型數(shù)據(jù)庫、Web服務(wù)器、服務(wù)接口、前端架構(gòu)及地圖引擎等;并展示了全開源架構(gòu)在互聯(lián)網(wǎng)地圖中的實際應(yīng)用,總結(jié)了其優(yōu)勢和不足。
開源;互聯(lián)網(wǎng)地圖;Web架構(gòu);非關(guān)系型數(shù)據(jù)庫
互聯(lián)網(wǎng)地圖是指登載在互聯(lián)網(wǎng)上或通過互聯(lián)網(wǎng)發(fā)送的基于服務(wù)器地理信息數(shù)據(jù)庫形成的具有實時生成、交互控制、數(shù)據(jù)搜索、屬性標注等特性的電子地圖。隨著互聯(lián)網(wǎng)及移動互聯(lián)網(wǎng)的蓬勃發(fā)展,社會公眾及企事業(yè)單位對互聯(lián)網(wǎng)地圖的需求越來越大[1]。然而,在互聯(lián)網(wǎng)地圖的生產(chǎn)實踐中,出現(xiàn)了許多新的技術(shù)問題,如用戶網(wǎng)絡(luò)環(huán)境復(fù)雜、系統(tǒng)高并發(fā)訪問、運維與安全問題等。傳統(tǒng)的IT或GIS架構(gòu)在解決互聯(lián)網(wǎng)地圖的問題時存在瓶頸且過于笨重[2]。因此,需要設(shè)計新的適合互聯(lián)網(wǎng)環(huán)境的解決方案。目前全球有超過400萬軟件工程師不斷地為開源技術(shù)社區(qū)貢獻寶貴源代碼,積累了超過20萬個開源軟件產(chǎn)品,形成了一套成熟而完整的開源軟件技術(shù)體系。網(wǎng)站服務(wù)器、移動操作系統(tǒng)、云計算及大數(shù)據(jù)等領(lǐng)域都離不開開源技術(shù)的支持。本文提出了一種基于全開源架構(gòu)的互聯(lián)網(wǎng)地圖解決方案,它覆蓋了開發(fā)中涉及到的云端服務(wù)層、數(shù)據(jù)層及瀏覽器表現(xiàn)層,且在項目實踐中被證明是可行的。
云端服務(wù)器的軟件架構(gòu)如圖1所示,包括操作系統(tǒng)、數(shù)據(jù)庫、Web動態(tài)服務(wù)、Web服務(wù)器和API接口等。
圖1 云端架構(gòu)圖
操作系統(tǒng):Linux,常用版本有RHEL、CentOS、Ubuntu等,開發(fā)者可根據(jù)個人習(xí)慣選擇合適的發(fā)行版。
數(shù)據(jù)庫:非關(guān)系型數(shù)據(jù)庫MongoDB。MongoDB是文檔型、無模式的,因此具有分布性和高度可拓展性。與傳統(tǒng)的關(guān)系型數(shù)據(jù)庫相比,MongoDB能更好地應(yīng)對互聯(lián)網(wǎng)應(yīng)用的需求變更,遷移與備份也更加靈活[3]。同時,利用MongoDB的空間特性,可以實現(xiàn)點、線、面等空間數(shù)據(jù)的存儲及鄰近分析等空間查詢。利用MongoDB存儲空間數(shù)據(jù)時,一定要建立空間索引。由于MongoDB的查詢不是基于SQL語言,所以在進行多條件查詢時,有時無法直觀判斷利用哪個索引效率更高,此時應(yīng)借助Explain進行不同方案的比較。
服務(wù)器端:異步I/O平臺Node.js,是一個基于Google V8引擎的JavaScript運行環(huán)境。它基于非阻塞的事件驅(qū)動機制,能輕松應(yīng)對互聯(lián)網(wǎng)應(yīng)用高并發(fā)的環(huán)境。與傳統(tǒng)的基于線程處理機制的Java/.NET等平臺相比,Node.js吞吐能力更強,內(nèi)存效率更高,單位時間內(nèi)可處理更多鏈接請求。Node.js的另一優(yōu)勢是社區(qū)非?;钴S,有大量的第三方庫支持,本文所述架構(gòu)利用Express框架快速搭建Web服務(wù)。當(dāng)然,Node.js并不是萬能的,它不適合CPU密集型計算,否則會導(dǎo)致請求無法響應(yīng);另外,它的異步機制在實現(xiàn)復(fù)雜的業(yè)務(wù)邏輯時會產(chǎn)生回調(diào)函數(shù)多級嵌套的問題,難以維護,推薦使用Promise模式解決此問題。
服務(wù)接口:RESTful。所有云端接口封裝為RESTful API,數(shù)據(jù)交換格式為json。RESTful的接口方式簡便、輕量級,且更加符合HTTP協(xié)議,在互聯(lián)網(wǎng)上被用來替代基于SOAP的服務(wù)方案。開發(fā)人員可輕松使用 Ajax 和 RESTful API創(chuàng)建豐富的界面。
Web服務(wù)器:Nginx,是一個高性能的HTTP和反向代理服務(wù)器,相較于Apache、IIS具有占有內(nèi)存少、穩(wěn)定性高、并發(fā)服務(wù)能力強等優(yōu)勢。在Linux操作系統(tǒng)下,Nginx使用epoll事件模型,所以其效率非常高。本架構(gòu)使用Nginx發(fā)布靜態(tài)資源并建立緩存,對基于Node.js的動態(tài)服務(wù)進行反向代理,提高安全性。
前端架構(gòu)(圖2)基于SPA模式。SPA應(yīng)用于頁面初次加載時,獲取全部的HTML、JavaScript及CSS,將所有業(yè)務(wù)邏輯集中到一個頁面中完成,通過Ajax實現(xiàn)頁面局部交互和刷新。因此,它可提供一種接近桌面應(yīng)用程序的流暢用戶體驗。
圖2 前端架構(gòu)圖
本文使用AngularJS結(jié)合Bootstrap開發(fā)SPA應(yīng)用。AngularJS是一個由Google和AngularJS社區(qū)的開發(fā)人員維護的開源Web應(yīng)用框架,支持HTML模板、路由、組件重用、依賴注入等諸多特性,可實現(xiàn)DOM操作和業(yè)務(wù)邏輯的松耦合,且可方便地向服務(wù)器獲取RESTful請求。利用Bootstrap工具包可實現(xiàn)清爽風(fēng)格的界面以及良好的交互效果。
在互聯(lián)網(wǎng)地圖應(yīng)用中,地圖渲染引擎是必不可少的,本文采用基于Openlayers構(gòu)建的引擎。Openlayers庫本身體積非常大,但得益于它的開源特性,可根據(jù)應(yīng)用的需求專門定制一個輕量級的地圖引擎庫,將不需要的功能庫剝離。另外,地圖引擎庫不應(yīng)破壞SPA應(yīng)用整體的MVVM架構(gòu)。本文的做法是將地圖引擎庫封裝為AngularJS的共享服務(wù),所有需要與地圖交互的DOM通過控制器以依賴注入的方式調(diào)用。
基于一系列從云端到客戶端的開源技術(shù)棧,目前已經(jīng)開發(fā)了多個互聯(lián)網(wǎng)地圖應(yīng)用。例如,《上海市黃浦區(qū)便民服務(wù)電子地圖》利用“天地圖·上?!碧峁┑幕A(chǔ)地理信息資源[4],輔助規(guī)土部門為社會公眾提供黃浦區(qū)的行政、醫(yī)療、文化、教育、公共服務(wù)等便民專題信息[5]。該應(yīng)用的主要功能包括地圖瀏覽、便民專題查詢、地名地址查詢、公交導(dǎo)航、周邊查詢、流量統(tǒng)計、運維日志監(jiān)控等。應(yīng)用界面如圖3、4所示。
本文介紹了實現(xiàn)互聯(lián)網(wǎng)地圖的一種可行有效的全開源技術(shù)架構(gòu)。實踐證明,該架構(gòu)具有以下優(yōu)勢:
①架構(gòu)中使用的全是輕量級解決方案,靈活、可擴展,能適應(yīng)互聯(lián)網(wǎng)地圖用戶需求及使用環(huán)境的快速變化。②在服務(wù)器端使用異步I/O模型提高了應(yīng)用在高并發(fā)環(huán)境下的吞吐能力,并通過Nginx反向代理的方式提升了安全性。③前端采用MVVM框架(AngularJS),節(jié)省了UI層DOM操作耗費的開發(fā)精力,且前后端使用相同的編程語言,縮短了開發(fā)周期,降低了后期維護難度。④整個架構(gòu)是全開源方案,大幅節(jié)省了軟件授權(quán)費用。
圖3 應(yīng)用首頁界面
圖4 應(yīng)用主界面
在實踐中,可根據(jù)具體問題調(diào)整其中個別技術(shù)。當(dāng)然,該架構(gòu)也存在一些不足,如SPA模式在移動互聯(lián)網(wǎng)設(shè)備中表現(xiàn)不流暢,移動前端的相關(guān)技術(shù)方案還需優(yōu)化,這將是下一步研究的重點。
[1] 周侗,龍毅.我國近期移動地圖與互聯(lián)網(wǎng)地圖發(fā)展綜述[J].地理與地理信息科學(xué),2012,28(5)∶1-5
[2] 朱俊豐,趙俊三.基于開源平臺的中小型WebGIS應(yīng)用研究[J].地理空間信息,2008,6(1)∶92-94
[3] 王光磊.MongoDB數(shù)據(jù)庫的應(yīng)用研究和方案優(yōu)化[J].中國科技信息,2011(20)∶93-96
[4] 李志剛.創(chuàng)新地理信息服務(wù)模式,打造網(wǎng)絡(luò)地理信息服務(wù)民族優(yōu)秀品牌[J].地理信息世界,2011(4)∶7-9
[5] 陳桂紅,史亞巍,王飛程,等.政府部門互聯(lián)網(wǎng)地圖服務(wù)的現(xiàn)狀與思考[J].地理信息世界,2014(3)∶18-22
[6] 孫劍.GIS的開源夢想[J].軟件世界,2007(16)∶50-51
[7] 龔健雅,杜道生,李清泉,等.當(dāng)代地理信息技術(shù)[M].北京∶科學(xué)出版社,2004
P208
B
1672-4623(2016)05-0069-02
10.3969/j.issn.1672-4623.2016.05.022
楊珩,碩士,主要從事網(wǎng)絡(luò)地理信息系統(tǒng)的開發(fā)與應(yīng)用工作。
2015-04-23。
項目來源:現(xiàn)代工程測量國家測繪地理信息局重點實驗室開放基金資助項目(TJES1308)。