当前位置:首页 期刊杂志

多源能见度数据监测系统的设计与实现

时间:2024-07-28

张志坚,伍光胜,胡琳

(广州市气象信息网络中心,广东广州 511430)



多源能见度数据监测系统的设计与实现

张志坚,伍光胜,胡琳

(广州市气象信息网络中心,广东广州 511430)

摘 要:介绍多源能见度数据监测系统的设计方案。阐述利用C#多线程技术实现对多源能见度数据的采集与入库。基于百度地图JavaScript API的二次应用及AJAX技术的异步加载,实现对能见度仪状态和实时数据的动态监控;采用ASP.NET的MSChart图表插件,以Spline曲线形式实现对不同能见度数据的对比展示。

关键词:计算机技术与应用;能见度;多线程;百度地图API;AJAX技术;数据展示

张志坚,伍光胜,胡琳.多源能见度数据监测系统的设计与实现[J].广东气象,2016,38(3):70 -73.

随着气象观测技术的发展,能见度的观测基本以自动观测为主要手段,通过在自动气象站系统中加入能见度观测仪,实现对能见度观测数据的自动采集和传输。目前广东省各气象台站已布设了一定数量的能见度自动观测仪,以广州市气象局为例,共建成的能见度观测仪有21个,其中从化局观测站、番禺局观测站、花都局观测站、增城局观测站、萝岗观测站等5个国家站通过专线上传数据,已接入区域自动站采集器实现数据无线上传的能见度仪站点有13个,其他3个站点通过本地FTP的方式上传。能见度作为发布灰霾和大雾等气象灾害预警信号的重要参考要素,建立基于归属地的能见度数据监测系统,能够及时准确地为预报人员提供实况数据,为精准的灰霾发布和大雾灾害预警提供有效的数据支撑,同时实现了对能见度观测设备的有效管理和实时监控,对能见度监测网的正常运行提供有力的保障。

1 系统设计方案

由于能见度数据需要通过多种传输途径来获取,所以监测系统需要解决多源数据采集的需求,对格式不一致的数据进行标准化处理、入库并实现集中展示[1 -2]。能见度监测系统的总体架构如图1所示,系统由两部分组成,即数据采集入库及数据展示。

图1 能见度业务监测平台总体架构示意图

多源数据采集入库主要针对数据源头分散且数据格式、传输方式不一致的能见度数据,采用C#多线程技术来实现数据采集、处理、入库。不同采集方式创建不同线程,做到不同传输方式之间的数据采集互不干扰,从而提高数据采集程序的采集效率和保证数据采集的可靠性[3]。

考虑到能见度业务展示平台的可维护性以及扩展性,使系统结构更加清晰,符合高内聚、低耦合原则,采用分层软件设计思想[4],将Web服务应用划分为表现层、业务逻辑层和数据访问层,充分考虑类以及对象关系,将具备同性质的类组织到一起,形成对应的类层次结构。表现层为系统人机交互界面,表现层根据具体业务需求实例化业务逻辑层的类对象,对业务需求进行数据展现,尽量不参与业务逻辑处理,以便降低结构层之间的耦合度。业务逻辑层跟系统功能息息相关,是系统业务处理的核心层,为系统功能提供数据和业务逻辑处理。数据访问层作为数据实体层访问的中间件,由业务逻辑层进行调用,实现数据的查询与更新操作。

2 多源数据的采集入库

2.1多线程数据采集的实现

数据采集程序由主线程使用Timer定时器实现对能见度数据的周期性采集,Timer运行的核心是线程池,Timer每到间隔时间后就会激发响应事件,因此要申请线程来执行对应的响应函数,Timer将获取线程的工作都交给了线程池来管理。通过Interval属性设定Timer采集周期,通过Tick事件设置响应事件。采集程序开始时启动定时器计时,当定时器到了一定时间间隔后,激发Tick响应事件,调用EventHandler委托,针对FTP、GPRS和WebService这3种数据传输方式分别创建数据采集子线程[5]。数据采集子线程创建完后重新进入下一个时次的数据采集计时。数据采集流程如图2所示。

图2 数据采集流程图

FTP数据采集线程开始后,调用FtpHelper类的FtpDownload()方法读取上一时次的数据采集参数进行数据文件FTP下载。数据文件下载成功后临时保存在本地目录,FTP数据采集线程接着调用数据文件解析类ProcessRTDFile进行数据标准化处理,然后调用数据库访问类SQLHelper进行数据入库,最后更新数据采集参数并结束线程;若数据文件下载失败,直接结束线程。数据访问类SQLHelper使用ADO.NET数据库访问技术进行封装,该类定义连接数据库、关闭连接、数据查询、数据更新、数据修改等一系列数据库访问操作方法。

GPRS数据采集线程调用GPRSHelper类以GPRS传输方式采集并在本地生成XML文件。若有XML数据文件生成,则调用ProcessXMLFile类解析XML文件节点和标准化处理,最后调用SQLHelper类数据入库;若无XML数据文件生成,则直接结束线程。

WebService数据采集线程调用WebSHelper类以接口调用的方式进行数据采集,对返回成功的JSON数据流调用ProcessJSON类进行数据解析处理,处理完后调用SQLHelper类数据入库;调用接口若无数据流返回,说明该时次无数据,则线程结束。

2.2数据库表的设计

数据库使用SQLServer2008关系型数据库,设计工具使用PowerDesigner,分别设计站点信息表STATIONINFO、数据实时表CURRENTDATA和数据历史表HISTORYDATA。为保证表结构的完整性,站点信息表STATIONINFO使用站号字段OBTID作为主键,数据实时表CURRENTDATA和数据历史表HISTORYDATA都使用<OBTID,DDATETIME>作为主键。数据历史表HISTORYDATA对DDATETIME列创建索引,从而提高数据的检索效率。站点信息表包含站号、站点名称、站点经度、站点纬度、站点类型、是否启用等字段;实时表和历史表包含站号、来报时间、1 min滑动平均能见度、10 min滑动平均能见度、小时最小能见度以及最小能见度出现的时间等字段。

3 多源数据展示

3.1百度地图导入及配置

在使用百度地图API服务[6 -8]前,必须在百度地图LBS开放平台上申请密钥(ak)并创建应用、配置服务。使用JavaScript标签<script>以脚本引入的方式加载百度地图服务:<script src=”http:/ / api.map.baidu.com/ api?v = 1.5&ak=您的密钥”type =”text/ javascript”></ script>。然后通过newBMap(container:String | HTMLElement,[opts:MapOptions])在指定的容器内创建地图实例,之后需要调用BMap.center-AndZoom()方法设置地图中心点坐标和地图显示级别对地图进行初始化,未进行初始化的地图不能进行任何操作。调用BMap.Boundary().get(“广州”,function(args))方法获取广州行政区划图边界多边型的点数组,通过BMap.Polygon (points:Array<Point>,[opts:PolygonOptions])创建多边形覆盖物,再调用addOverlay(overlay:Overlay)将广州行政区划边界覆盖物添加到地图中。至此便完成了百度地图的加载和基本配置。

3.2基于AJAX地图标注加载

站点信息和实况数据的加载使用jQuery的AJAX异步加载数据功能,在不重新加载整个网页的情况下,每2min向服务器发起异步POST请求对网页的地图站点信息进行数据刷新。AJAX异步请求代码如下:

$(function(){

$.ajax({

type:"Post",

url:"refresh.aspx",

contentType:"application/ json;charset = utf -8",

dataType:"text",

success:function(response){

/ /数据返回成功

/ /添加站点信息标注

addMarker(response);

},

error:function(xmlReq,err,c){

/ /请求失败处理代码

});

});服务端接收到请求后通过按指定的业务逻辑规则查询数据,为方便前端数据解析处理,业务逻辑层按照轻量级的数据交换格式JSON对站号、站名、经纬度、时次以及能见度数值等信息进行数据封装并返回给前端。封装的数据格式如下:{'records':[{'sid':'G1088','sname':'广州五山站','datetime':'2015 -10 -12 08:20:00','value':'32.6','lng':'113.3441','lat':'23.15678'},{'sid':'G3106','sname':'吕田镇东升','datetime':'2015 -10 -12 08:20:00','value':'41.7','lng':'113.86','lat':'23.81821'}]}。AJAX请求成功后,回调函数success(data,textStatus,jqXHR)处理返回数据,编写JavaScript脚本对返回的能见度数值和时次进行异常判断,通过调用BMap.Icon(url:String,size:Size,[opts:IconOptions])方法创建自定义图标样式,正常站点设置为绿色图标,异常站点设置为红色图标,然后根据返回的站点经纬度信息调用Map.addOverlay(marker:Point)方法向地图中添加自定义标注。为方便对站点信息和数据的查看,使用Marker.addEventListener(event:String,handler:Function)方法对地图标注添加鼠标事件进行监听,当鼠标移动和停留到标注上方时,调用BMap.InfoWindow()创建信息窗对象显示该站点的站号、站名、数据时次和能见度数值等信息,实现的效果如图3所示。

3.3多站点集成曲线图的实现

能见度变化曲线图使用ASP.NET图表控件[8]Chart以Spline形式进行集中展示,方便对多站点能见度变化进行对比分析。考虑到曲线绘制的美观性,数据集不能过多,过多的数据集会导致曲线的标注点过于密集,故在能见度数据集的时间跨度上选取了“过去2小时”、“过去12小时”、“过去24小时”和“过去48小时”这4个时间段。“过去2小时”数据集的时间分辨率是每5 min 1次,“过去12小时”数据集的时间分辨率是每30 min 1次,而“过去24小时”和“过去48小时”的数据集均为整点时次数据。

图3 基于百度地图的站点信息及数据监测效果

图表区域通过<asp:ChartArea></ asp:ChartArea>进行初始化,包括坐标轴、图表背景等属性的设置。数据列属性样式用标签<asp:Series></ asp:Series>设置,包括系列名称Name、曲线颜色Color、图表形式ChartType、数据标点样式MarkerStyle、曲线宽度BorderWidth等属性。4个时间段的数据集通过下拉框控件<asp:DropDownList></ asp:DropDownList>实现时间段选择,下拉框的值变化后触发SelectedIndexChanged(object sender,EventArgs e)事件函数对Chart图表控件进行数据源的刷新与重新绑定。数据列图例选择则通过多选框控件<asp:CheckBoxList></ asp:CheckBoxList>来实现,多选框控件使用DataSource属性和DataBind()进行站点信息初始化,每次多选框的点击事件都会触发图表控件数据源的刷新与重新绑定。为了使图例和所属曲线的对应更直观性,把数据列的图例及其曲线颜色设置为同一种颜色(图4)。

多源能见度数据监测系统已经在广州市气象局业务运行,为气象预警预报提供历史及实况的能见度数据,实现了归属地能见度网站点可视化统一管理、监控和实时数据应用,展示平台以不同的数据形式对表现能见度数据,更具直观性和可用性。基于C#多线程技术的多源数据采集及百度地图JavaScript API的WEBGIS展示应用实例对于其他气象探测设备的数据采集及数据展示平台的开发有一定的参考价值。

图4 能见度变化曲线效果

参考文献:

[1]梁慎青,石小英,梁苑苑,等.广东省气象信息实时监视系统的开发及应用[J]广东气象,2008,31(1):57 -58.

[2]罗鸣,江崟,潘国盛.气象自动站数据监控平台的设计与实现[J].广东气象,2012,34(4):57 -58.

[3]伍光胜,敖振浪,李源鸿,等.大型自动气象监测网及数据采集中心的设计及应用[J].气象,2010,36(3):128 -135.

[4]姜永,郑春明,李国强.基于.NET平台的三层架构软件框架的设计与实现[J].计算机技术与发展,2011,21(2):77 -78.

[5]伍光胜,李建勇,刘艳中,等.浪涌气象数据采集系统及其关键技术[J].南京信息工程大学学报,2013,5 (4):336 -345.

[6]曹炜,肖玮.基于WebGIS的赣州市旅游信息查询系统设计[J].科技资讯,2014(27):18.

[7]朱小兰.使用百度地图JavaScript API开发旅游线路设计与行程定制系统[J].产业与科技论坛,2015,14 (3):44 -45.

[8]孙迪,李沛鸿.百度地图API在WebGIS中的应用[J].河南科技,2013(11):165 -166.

[8]朱健,庄科,周丹,等.MSChart在气象数据图形化显示中的应用[J].浙江气象,2008,30(1):58 -62.

中图分类号:TP38

文献标识码:A

doi:10.3868/ j.issn.1007 -6180.2016.03.018

收稿日期:2015 -08 -28

作者简介:张志坚(1888年生),男,助理工程师,主要从事气象信息数据及网络管理工作。E - mail:780670233@qq.com

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!