楊 珩,張桂芬
(1.上海市測繪院,上海 200063)
基于全開源架構的互聯網地圖設計與應用
楊 珩1,張桂芬1
(1.上海市測繪院,上海 200063)

介紹了一種基于全開源架構的互聯網地圖解決方案;詳細闡述了該架構所使用的技術棧,包括非關系型數據庫、Web服務器、服務接口、前端架構及地圖引擎等;并展示了全開源架構在互聯網地圖中的實際應用,總結了其優勢和不足。
開源;互聯網地圖;Web架構;非關系型數據庫
互聯網地圖是指登載在互聯網上或通過互聯網發送的基于服務器地理信息數據庫形成的具有實時生成、交互控制、數據搜索、屬性標注等特性的電子地圖。隨著互聯網及移動互聯網的蓬勃發展,社會公眾及企事業單位對互聯網地圖的需求越來越大[1]。然而,在互聯網地圖的生產實踐中,出現了許多新的技術問題,如用戶網絡環境復雜、系統高并發訪問、運維與安全問題等。傳統的IT或GIS架構在解決互聯網地圖的問題時存在瓶頸且過于笨重[2]。因此,需要設計新的適合互聯網環境的解決方案。目前全球有超過400萬軟件工程師不斷地為開源技術社區貢獻寶貴源代碼,積累了超過20萬個開源軟件產品,形成了一套成熟而完整的開源軟件技術體系。網站服務器、移動操作系統、云計算及大數據等領域都離不開開源技術的支持。本文提出了一種基于全開源架構的互聯網地圖解決方案,它覆蓋了開發中涉及到的云端服務層、數據層及瀏覽器表現層,且在項目實踐中被證明是可行的。
云端服務器的軟件架構如圖1所示,包括操作系統、數據庫、Web動態服務、Web服務器和API接口等。

圖1 云端架構圖
操作系統:Linux,常用版本有RHEL、CentOS、Ubuntu等,開發者可根據個人習慣選擇合適的發行版。
數據庫:非關系型數據庫MongoDB。MongoDB是文檔型、無模式的,因此具有分布性和高度可拓展性。與傳統的關系型數據庫相比,MongoDB能更好地應對互聯網應用的需求變更,遷移與備份也更加靈活[3]。同時,利用MongoDB的空間特性,可以實現點、線、面等空間數據的存儲及鄰近分析等空間查詢。利用MongoDB存儲空間數據時,一定要建立空間索引。由于MongoDB的查詢不是基于SQL語言,所以在進行多條件查詢時,有時無法直觀判斷利用哪個索引效率更高,此時應借助Explain進行不同方案的比較。
服務器端:異步I/O平臺Node.js,是一個基于Google V8引擎的JavaScript運行環境。它基于非阻塞的事件驅動機制,能輕松應對互聯網應用高并發的環境。與傳統的基于線程處理機制的Java/.NET等平臺相比,Node.js吞吐能力更強,內存效率更高,單位時間內可處理更多鏈接請求。Node.js的另一優勢是社區非常活躍,有大量的第三方庫支持,本文所述架構利用Express框架快速搭建Web服務。當然,Node.js并不是萬能的,它不適合CPU密集型計算,否則會導致請求無法響應;另外,它的異步機制在實現復雜的業務邏輯時會產生回調函數多級嵌套的問題,難以維護,推薦使用Promise模式解決此問題。
服務接口:RESTful。所有云端接口封裝為RESTful API,數據交換格式為json。RESTful的接口方式簡便、輕量級,且更加符合HTTP協議,在互聯網上被用來替代基于SOAP的服務方案。開發人員可輕松使用 Ajax 和 RESTful API創建豐富的界面。
Web服務器:Nginx,是一個高性能的HTTP和反向代理服務器,相較于Apache、IIS具有占有內存少、穩定性高、并發服務能力強等優勢。在Linux操作系統下,Nginx使用epoll事件模型,所以其效率非常高。本架構使用Nginx發布靜態資源并建立緩存,對基于Node.js的動態服務進行反向代理,提高安全性。
前端架構(圖2)基于SPA模式。SPA應用于頁面初次加載時,獲取全部的HTML、JavaScript及CSS,將所有業務邏輯集中到一個頁面中完成,通過Ajax實現頁面局部交互和刷新。因此,它可提供一種接近桌面應用程序的流暢用戶體驗。

圖2 前端架構圖
本文使用AngularJS結合Bootstrap開發SPA應用。AngularJS是一個由Google和AngularJS社區的開發人員維護的開源Web應用框架,支持HTML模板、路由、組件重用、依賴注入等諸多特性,可實現DOM操作和業務邏輯的松耦合,且可方便地向服務器獲取RESTful請求。利用Bootstrap工具包可實現清爽風格的界面以及良好的交互效果。
在互聯網地圖應用中,地圖渲染引擎是必不可少的,本文采用基于Openlayers構建的引擎。Openlayers庫本身體積非常大,但得益于它的開源特性,可根據應用的需求專門定制一個輕量級的地圖引擎庫,將不需要的功能庫剝離。另外,地圖引擎庫不應破壞SPA應用整體的MVVM架構。本文的做法是將地圖引擎庫封裝為AngularJS的共享服務,所有需要與地圖交互的DOM通過控制器以依賴注入的方式調用。
基于一系列從云端到客戶端的開源技術棧,目前已經開發了多個互聯網地圖應用。例如,《上海市黃浦區便民服務電子地圖》利用“天地圖·上海”提供的基礎地理信息資源[4],輔助規土部門為社會公眾提供黃浦區的行政、醫療、文化、教育、公共服務等便民專題信息[5]。該應用的主要功能包括地圖瀏覽、便民專題查詢、地名地址查詢、公交導航、周邊查詢、流量統計、運維日志監控等。應用界面如圖3、4所示。
本文介紹了實現互聯網地圖的一種可行有效的全開源技術架構。實踐證明,該架構具有以下優勢:
①架構中使用的全是輕量級解決方案,靈活、可擴展,能適應互聯網地圖用戶需求及使用環境的快速變化。②在服務器端使用異步I/O模型提高了應用在高并發環境下的吞吐能力,并通過Nginx反向代理的方式提升了安全性。③前端采用MVVM框架(AngularJS),節省了UI層DOM操作耗費的開發精力,且前后端使用相同的編程語言,縮短了開發周期,降低了后期維護難度。④整個架構是全開源方案,大幅節省了軟件授權費用。

圖3 應用首頁界面

圖4 應用主界面
在實踐中,可根據具體問題調整其中個別技術。當然,該架構也存在一些不足,如SPA模式在移動互聯網設備中表現不流暢,移動前端的相關技術方案還需優化,這將是下一步研究的重點。
[1] 周侗,龍毅.我國近期移動地圖與互聯網地圖發展綜述[J].地理與地理信息科學,2012,28(5)∶1-5
[2] 朱俊豐,趙俊三.基于開源平臺的中小型WebGIS應用研究[J].地理空間信息,2008,6(1)∶92-94
[3] 王光磊.MongoDB數據庫的應用研究和方案優化[J].中國科技信息,2011(20)∶93-96
[4] 李志剛.創新地理信息服務模式,打造網絡地理信息服務民族優秀品牌[J].地理信息世界,2011(4)∶7-9
[5] 陳桂紅,史亞巍,王飛程,等.政府部門互聯網地圖服務的現狀與思考[J].地理信息世界,2014(3)∶18-22
[6] 孫劍.GIS的開源夢想[J].軟件世界,2007(16)∶50-51
[7] 龔健雅,杜道生,李清泉,等.當代地理信息技術[M].北京∶科學出版社,2004
P208
B
1672-4623(2016)05-0069-02
10.3969/j.issn.1672-4623.2016.05.022
楊珩,碩士,主要從事網絡地理信息系統的開發與應用工作。
2015-04-23。
項目來源:現代工程測量國家測繪地理信息局重點實驗室開放基金資助項目(TJES1308)。