基于开源软件的Web GIS地震大数据综合平台

2018-03-07 02:40石晓辉刘克辉胡旭辉
科技资讯 2018年33期

石晓辉 刘克辉 胡旭辉

摘 要:采用互联网行业流行的Elastic Search、OpenStreetMap、Leaflet、jQuery、ECharts等开源软件技术,提出了一种基于局域网Web GIS地图服务和分布式NoSQL数据库,实现Web客户端与服务端之间的大数据交互方案。不依赖于桌面GIS和MATLAB专业软件,实现低成本、跨平台的快速开发。为有效解决互联网时代海量空间信息相关的数据存储和可视化交互问题提供了一种新思路,在需要进行GIS大数据可视化交互的地震、气象等行业具有很高的实用价值。

关键词:Web GIS 大数据交互 Elastic Search 开发框架 离线地图

中图分类号:P315 文献标识码: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

伴随着现代互联网技术的成熟和大数据技术的发展,我们拥有了更好的数据利用能力,如何应用这些强有力的工具,将已有数据以有意义的方式来实现可视化和良好交互,挖掘揭示隐藏在这些数据背后的潜在信息,是一项非凡的工作。

海量空间信息大数据对新一代的Web GIS系统也提出了新的要求。传统GIS由于数据互操作性差、共享能力弱等特点正在逐渐衰退,Web GIS逐渐占据主流,目前,地图服务厂商和GIS厂商都有自己的Web GIS产品,如Google Map Javascript API、Arc GIS API for Javascript等,除此之外,出现了越来越多的Javascript开源Web GIS客户端,如Leaflet、Openlayers、Map Easy、Open Scales等。由于开源 GIS产品具有免费、开放、可扩展性和可定制性强,以及开发周期短、成本低等特点,基于开源GIS软件的应用项目越来越多[1-5]。但是这些项目基本都只是利用了GIS的地图显示功能,鲜有将这些具有空间信息属性的海量业务数据进行存储、挖掘、并可视化交互的综合平台应用。

本平台基于分布式Elastic Search搜索引擎,局域网地图服务器,能够实现地震行业海量业务数据的存储、查询和可视化交互,尤其关注对数据的多样化聚合分析,提供了良好交互界面以提供辅助决策,对于历史数据量大、地理空间数据敏感的相关行业具有很高的应用价值。

1 平台架构设计

技术选型是项目和产品开发中一个不可缺少的环节,在软件架构中有着举足轻重的作用。传统的前后端耦合在一起的模式,不能满足当前环境下的大数据、高并发等需求,如.NET的WebForm模式已经逐渐被MVC取代[6]。本平台采用的B/S结构,从软件架构上来讲将整个平台抽象为两部分,即前端和后端,两者通过REST接口来交互数据。前端主要注重用户交互界面和少部分判断逻辑的实现,并且完全通过Web浏览器渲染展现。

而后端主要负责业务建模、逻辑流程以及数据处理。客户只需要有常用的Web浏览器即可,不需要安装任何插件,对系统硬件资源没有特别的要求。

1.1 后端穩健的Flask开源Web框架

Flask是随着Python兴起的一种可扩展微框架(micro framework),功能可根据相应的扩展包进行扩展。平台数据流控制等部分都可以由框架来处理完成,我们只需关注具体的业务逻辑开发,在提升开发效率的同时,稳定性进一步增强。

所谓“微框架”并不代表Flask功能不强。微框架中的“微”字表示Flask的目标是保持核心简单而又可扩展。 Flask可以变成你任何想要的东西,一切恰到好处。Flask通过扩展可以为应用添加额外功能,如数据库整合、表单验证、上传处理和各种开放验证等等。

1.2 前端使用Jinja2+ECharts+Leaflet组合模式

Jinja2是Python下一个被广泛应用的模版引擎,它的设计思想来源于Django的模板引擎,并扩展了其语法和一系列强大的功能,可以快速生成html文件。

Leaflet和Openlayer是两个主要的开源前端地图交互类库。两者的开放程度都很高,但是考虑到Leaflet在桌面端和移动端都有着极好的兼容和支持,并可以扩展插件,本平台选择了Leaflet。

ECharts4.0是百度开发的一款商用级开源数据可视化工具,一个纯Javascript的图表库,创新的拖拽重计算、数据视图、值域漫游等特性大大增强了用户体验,对大数据渲染、数据集、跨平台无障碍访问的技术特性为平台的大数据挖掘、整合提供了很好的支撑。

5.1 代码结构

按照flask框架要求部署.py、.ini、.js、.html、.wsgi文件,如图3所示。其中fixFunc.py和evaluation.py为核心业务处理脚本。

实现过程中的核心代码如下。

(1)后端业务处理。

程序初始化导入Excel,读取地震台站配置信息代码节选:workbook=xlrd.open_workbook(os.path.join(path,"config\\background-noise.xlsx"))flask接受前端请求,对分布式数据库中的海量数据进行批量检索代码节选: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)前端可视化表达。

ECharts图例以Leaflet坐标系为支撑,加载交互界面,核心 Javascript 编码节选:var chart = L.control({position: 'bottomright'});chart.addTo(leafletmap);var myChart= echarts.init (document.getElementById ('chatrdemo'));对于海量数据使用异步请求成功后进行增量加载,代码节选: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); }})}

可视化交互功能实现, 代码节选: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("位置当前经纬度:" + latlng.toString()).openOn(e._map);})numMaker=numMaker+1;}

5.2 实现效果

经过多次性能优化和实际测试,台网监控能力图中对40万条地理信息散点数据的平均检索解析时间为600ms。前端ECharts在实现40万地理数据全部同时渲染时仍可响应用户地图操作,浏览器流畅无卡顿,地图缩放、平移时监控能力图渲染正常无偏移,分析展示形式丰富多样。

饼状、柱状统计图采用小图右下角展示,自适应浏览器缩放,完美配合监控能力和震级分布主图。震级数据切换时不需要重新绘图,人机交互反应迅速、动态效果好,界面展示效果如图4、图5所示。

6 结语

平台结合当前最新的大数据技术和地理信息技术,以及地震系统的实际业务需求,在项目中进行了脚踏实地的技术实践和解决痛点的功能实现。

(1)基于开源开放的OpenStreetMap的局域网地理信息服务,为未来诸多行业提供了商业地理信息系统之外的另一条道路。

(2)分布式NoSQL数据库Elastic Search为海量数据的计算提供了高性能的架构基础,并为未来平台扩展提供了良好的支撑。

(3)借助ECharts的海量数据渲染能力,使得海量数据的分析结果展示成为一种可能。

基于此平台搭建的山东省地震监控能力系统达到了设计目的,满足功能需求,证明了该平台的有效性和实际应用的可行性。

参考文献

[1] 董一兵,朱音,王仁涛,等.基于开源WebGIS的测震台站运维管理系统的设计与实现[J].震灾防御技术,2017,12(2):399-408.

[2] 张环曦,周安聘,董博,等.基于WebGIS的前兆台站仪器状态监视系统[J].高原地震,2017,29(2):48-52.

[3] 李成军,刘爱园.一种基于WebGIS的水质监测数据表达方式的设计与实现[J].测绘与空间地理信息,2018,41(5):132,141.

[4] 魏艳旭,杨锐,刘晓丹,等.基于WebGIS的地震应急数据共享系统研究[J].高原地震,2016,28(1):45-50.

[5] 胡达天,胡庆武.基于开源系统的跨平台地图客户端开发[J].测绘科学,2015,40(7):142-145.

[6] 刘梅.支持多行业的WebGIS中间件体系结构及接口的研究与实现[D].电子科技大学,2017.

[7] 胡斌,董一兵,刘新,等.基于百度地图API的测震台网电子地图服务系統的设计与实现[J].地震研究,2014.37(2):312-316.