石曉輝 劉克輝 胡旭輝
摘 要:采用互聯(lián)網(wǎng)行業(yè)流行的Elastic Search、OpenStreetMap、Leaflet、jQuery、ECharts等開源軟件技術(shù),提出了一種基于局域網(wǎng)Web GIS地圖服務(wù)和分布式NoSQL數(shù)據(jù)庫,實現(xiàn)Web客戶端與服務(wù)端之間的大數(shù)據(jù)交互方案。不依賴于桌面GIS和MATLAB專業(yè)軟件,實現(xiàn)低成本、跨平臺的快速開發(fā)。為有效解決互聯(lián)網(wǎng)時代海量空間信息相關(guān)的數(shù)據(jù)存儲和可視化交互問題提供了一種新思路,在需要進行GIS大數(shù)據(jù)可視化交互的地震、氣象等行業(yè)具有很高的實用價值。
關(guān)鍵詞:Web GIS 大數(shù)據(jù)交互 Elastic Search 開發(fā)框架 離線地圖
中圖分類號:P315 文獻標(biāo)識碼:A 文章編號:1672-3791(2018)11(c)-0014-03
Abstract: A solution of big data interaction between web server and client is proposed using Elastic Search, OpenStreetMap, Leaflet, jQuery and ECharts technologies. The solution is based on LAN map server and distributed NoSQL database. It can be high performance, low cost and cross-platform Supporting, independent of desktop GIS and MATLAB. It can be a new method to solve the problem of storing and interacting between big data, which has the attribute of GIS information. It can be applied in the field, which needs visual interaction of big data, such as seismological and meteorological fields.
Key Words: Web GIS; Big data interaction; Elastic Search;Development framework; Offline map
伴隨著現(xiàn)代互聯(lián)網(wǎng)技術(shù)的成熟和大數(shù)據(jù)技術(shù)的發(fā)展,我們擁有了更好的數(shù)據(jù)利用能力,如何應(yīng)用這些強有力的工具,將已有數(shù)據(jù)以有意義的方式來實現(xiàn)可視化和良好交互,挖掘揭示隱藏在這些數(shù)據(jù)背后的潛在信息,是一項非凡的工作。
海量空間信息大數(shù)據(jù)對新一代的Web GIS系統(tǒng)也提出了新的要求。傳統(tǒng)GIS由于數(shù)據(jù)互操作性差、共享能力弱等特點正在逐漸衰退,Web GIS逐漸占據(jù)主流,目前,地圖服務(wù)廠商和GIS廠商都有自己的Web GIS產(chǎn)品,如Google Map Javascript API、Arc GIS API for Javascript等,除此之外,出現(xiàn)了越來越多的Javascript開源Web GIS客戶端,如Leaflet、Openlayers、Map Easy、Open Scales等。由于開源 GIS產(chǎn)品具有免費、開放、可擴展性和可定制性強,以及開發(fā)周期短、成本低等特點,基于開源GIS軟件的應(yīng)用項目越來越多[1-5]。但是這些項目基本都只是利用了GIS的地圖顯示功能,鮮有將這些具有空間信息屬性的海量業(yè)務(wù)數(shù)據(jù)進行存儲、挖掘、并可視化交互的綜合平臺應(yīng)用。
本平臺基于分布式Elastic Search搜索引擎,局域網(wǎng)地圖服務(wù)器,能夠?qū)崿F(xiàn)地震行業(yè)海量業(yè)務(wù)數(shù)據(jù)的存儲、查詢和可視化交互,尤其關(guān)注對數(shù)據(jù)的多樣化聚合分析,提供了良好交互界面以提供輔助決策,對于歷史數(shù)據(jù)量大、地理空間數(shù)據(jù)敏感的相關(guān)行業(yè)具有很高的應(yīng)用價值。
1 平臺架構(gòu)設(shè)計
技術(shù)選型是項目和產(chǎn)品開發(fā)中一個不可缺少的環(huán)節(jié),在軟件架構(gòu)中有著舉足輕重的作用。傳統(tǒng)的前后端耦合在一起的模式,不能滿足當(dāng)前環(huán)境下的大數(shù)據(jù)、高并發(fā)等需求,如.NET的WebForm模式已經(jīng)逐漸被MVC取代[6]。本平臺采用的B/S結(jié)構(gòu),從軟件架構(gòu)上來講將整個平臺抽象為兩部分,即前端和后端,兩者通過REST接口來交互數(shù)據(jù)。前端主要注重用戶交互界面和少部分判斷邏輯的實現(xiàn),并且完全通過Web瀏覽器渲染展現(xiàn)。
而后端主要負(fù)責(zé)業(yè)務(wù)建模、邏輯流程以及數(shù)據(jù)處理??蛻糁恍枰谐S玫腤eb瀏覽器即可,不需要安裝任何插件,對系統(tǒng)硬件資源沒有特別的要求。
1.1 后端穩(wěn)健的Flask開源Web框架
Flask是隨著Python興起的一種可擴展微框架(micro framework),功能可根據(jù)相應(yīng)的擴展包進行擴展。平臺數(shù)據(jù)流控制等部分都可以由框架來處理完成,我們只需關(guān)注具體的業(yè)務(wù)邏輯開發(fā),在提升開發(fā)效率的同時,穩(wěn)定性進一步增強。
所謂“微框架”并不代表Flask功能不強。微框架中的“微”字表示Flask的目標(biāo)是保持核心簡單而又可擴展。 Flask可以變成你任何想要的東西,一切恰到好處。Flask通過擴展可以為應(yīng)用添加額外功能,如數(shù)據(jù)庫整合、表單驗證、上傳處理和各種開放驗證等等。
1.2 前端使用Jinja2+ECharts+Leaflet組合模式
Jinja2是Python下一個被廣泛應(yīng)用的模版引擎,它的設(shè)計思想來源于Django的模板引擎,并擴展了其語法和一系列強大的功能,可以快速生成html文件。
Leaflet和Openlayer是兩個主要的開源前端地圖交互類庫。兩者的開放程度都很高,但是考慮到Leaflet在桌面端和移動端都有著極好的兼容和支持,并可以擴展插件,本平臺選擇了Leaflet。
ECharts4.0是百度開發(fā)的一款商用級開源數(shù)據(jù)可視化工具,一個純Javascript的圖表庫,創(chuàng)新的拖拽重計算、數(shù)據(jù)視圖、值域漫游等特性大大增強了用戶體驗,對大數(shù)據(jù)渲染、數(shù)據(jù)集、跨平臺無障礙訪問的技術(shù)特性為平臺的大數(shù)據(jù)挖掘、整合提供了很好的支撐。
5.1 代碼結(jié)構(gòu)
按照flask框架要求部署.py、.ini、.js、.html、.wsgi文件,如圖3所示。其中fixFunc.py和evaluation.py為核心業(yè)務(wù)處理腳本。
實現(xiàn)過程中的核心代碼如下。
(1)后端業(yè)務(wù)處理。
程序初始化導(dǎo)入Excel,讀取地震臺站配置信息代碼節(jié)選:workbook=xlrd.open_workbook(os.path.join(path,"config\\background-noise.xlsx"))flask接受前端請求,對分布式數(shù)據(jù)庫中的海量數(shù)據(jù)進行批量檢索代碼節(jié)選:es_result =helpers.scan(es,query={"_source": ["lng","lat","mag"],"query":{"range":{"mag":{"gt":Interval,"lte":Interval+1}}}},scroll= "10m",index="magdir",doc_type="maginfo",timeout="10m")
(2)前端可視化表達(dá)。
ECharts圖例以Leaflet坐標(biāo)系為支撐,加載交互界面,核心 Javascript 編碼節(jié)選:var chart = L.control({position: 'bottomright'});chart.addTo(leafletmap);var myChart= echarts.init (document.getElementById ('chatrdemo'));對于海量數(shù)據(jù)使用異步請求成功后進行增量加載,代碼節(jié)選:function fetchData(idx) {if (idx >= CHUNK_COUNT) {return; }$.ajax({url: "/sendjson2",type: "POST",data:JSON.stringify(idx),contentType : "application/json",dataType : "json",success: function (data0) {myChart.appendData({seriesIndex: idx,data: data0})fetchData(idx+1); }})}
可視化交互功能實現(xiàn), 代碼節(jié)選:function addMaker(e) {window["rms"+numMaker] = prompt('請輸入臺基噪聲RMS值,請確保輸入正確,例:6.98E-08');var makerLocation =e._map.getCenter();window["tempmaker"+numMaker]=new L.marker(makerLocation,{draggable: true}).addTo(temmarkers).bindPopup("請拖拽選擇位置!").openPopup()window["tempmaker"+numMaker].on('dragend', function (event) {var marker = event.target;var latlng = marker.getLatLng();L.popup().setLatLng([latlng.lat,latlng.lng]).setContent("位置當(dāng)前經(jīng)緯度:" + latlng.toString()).openOn(e._map);})numMaker=numMaker+1;}
5.2 實現(xiàn)效果
經(jīng)過多次性能優(yōu)化和實際測試,臺網(wǎng)監(jiān)控能力圖中對40萬條地理信息散點數(shù)據(jù)的平均檢索解析時間為600ms。前端ECharts在實現(xiàn)40萬地理數(shù)據(jù)全部同時渲染時仍可響應(yīng)用戶地圖操作,瀏覽器流暢無卡頓,地圖縮放、平移時監(jiān)控能力圖渲染正常無偏移,分析展示形式豐富多樣。
餅狀、柱狀統(tǒng)計圖采用小圖右下角展示,自適應(yīng)瀏覽器縮放,完美配合監(jiān)控能力和震級分布主圖。震級數(shù)據(jù)切換時不需要重新繪圖,人機交互反應(yīng)迅速、動態(tài)效果好,界面展示效果如圖4、圖5所示。
6 結(jié)語
平臺結(jié)合當(dāng)前最新的大數(shù)據(jù)技術(shù)和地理信息技術(shù),以及地震系統(tǒng)的實際業(yè)務(wù)需求,在項目中進行了腳踏實地的技術(shù)實踐和解決痛點的功能實現(xiàn)。
(1)基于開源開放的OpenStreetMap的局域網(wǎng)地理信息服務(wù),為未來諸多行業(yè)提供了商業(yè)地理信息系統(tǒng)之外的另一條道路。
(2)分布式NoSQL數(shù)據(jù)庫Elastic Search為海量數(shù)據(jù)的計算提供了高性能的架構(gòu)基礎(chǔ),并為未來平臺擴展提供了良好的支撐。
(3)借助ECharts的海量數(shù)據(jù)渲染能力,使得海量數(shù)據(jù)的分析結(jié)果展示成為一種可能。
基于此平臺搭建的山東省地震監(jiān)控能力系統(tǒng)達(dá)到了設(shè)計目的,滿足功能需求,證明了該平臺的有效性和實際應(yīng)用的可行性。
參考文獻
[1] 董一兵,朱音,王仁濤,等.基于開源WebGIS的測震臺站運維管理系統(tǒng)的設(shè)計與實現(xiàn)[J].震災(zāi)防御技術(shù),2017,12(2):399-408.
[2] 張環(huán)曦,周安聘,董博,等.基于WebGIS的前兆臺站儀器狀態(tài)監(jiān)視系統(tǒng)[J].高原地震,2017,29(2):48-52.
[3] 李成軍,劉愛園.一種基于WebGIS的水質(zhì)監(jiān)測數(shù)據(jù)表達(dá)方式的設(shè)計與實現(xiàn)[J].測繪與空間地理信息,2018,41(5):132,141.
[4] 魏艷旭,楊銳,劉曉丹,等.基于WebGIS的地震應(yīng)急數(shù)據(jù)共享系統(tǒng)研究[J].高原地震,2016,28(1):45-50.
[5] 胡達(dá)天,胡慶武.基于開源系統(tǒng)的跨平臺地圖客戶端開發(fā)[J].測繪科學(xué),2015,40(7):142-145.
[6] 劉梅.支持多行業(yè)的WebGIS中間件體系結(jié)構(gòu)及接口的研究與實現(xiàn)[D].電子科技大學(xué),2017.
[7] 胡斌,董一兵,劉新,等.基于百度地圖API的測震臺網(wǎng)電子地圖服務(wù)系統(tǒng)的設(shè)計與實現(xiàn)[J].地震研究,2014.37(2):312-316.