基于百度地图API的气象信息显示系统设计与实现
2019-06-24赵晔晖
赵 晔 晖
(民航宁夏空管分局气象台, 宁夏 银川 750009)
准确判断复杂天气演变趋势,及时发布气象预报,这是民航气象预报员工作的重要内容。气象预报的准确率问题尤其是复杂天气预报的准确率问题,是气象预报系统研究的热点和难点问题。刘艳中等人对气象自动站数据进行归类,结合百度地图,研究了气象自动站系统数据的监控问题[1-2];白学文等人探讨了百度地图在气象精细化预报中的作用[3];朱剑明等人以百度地图API为基础,结合预报员需求,设计了基于百度地图API的全国机场天气警报系统[4]。他们的研究成果都具有十分重要的实用价值,但现有系统在数据显示方面仍然存在一些不足。
为了解决民航气象预报系统在数据显示方面的问题,我们研究设计了基于百度地图API的气象信息显示系统。该系统采集宁夏地区各县市部署的区域气象自动站数据,按经纬度坐标[5]实时将各种气象要素显示到百度地图上,同时将银川河东机场发布的实况报文信息以图形化方式显示出来。通过改进传统字符串搜索算法[6-7],提高了查找效率。
1 系统总体框架及流程
气象信息显示系统的总体架构如图1所示。该系统包括客户端、民航气象数据库服务器、Web服务器、百度地图API服务器、气象自动站服务器和浏览器、路由器、防火墙、交换机。系统设计模式基于BS架构,客户端先通过Web服务器访问民航气象防火墙,获得允许后访问气象数据库系统服务器和气象自动站服务器,获取机场实况报文信息及宁夏地区各县市气象要素。通过Internet将数据发送给浏览器,浏览器访问百度地图API服务器,最后在浏览器上将机场气象报文和宁夏地区气象自动站数据叠加在百度地图上。
图1 气象信息显示系统的总体架构
2 字符串搜索算法优化
假设有一字符串a为BBCABCDABABCDABCDABDE,需要搜索的字符串b为ABCDABD。按照传统算法,要把需搜索字符串的每个字符拿去与已有字符串逐一进行比对。其中,存在一个位置重复比对多次的情况,效率较差,而复杂度较高。假设两个字符串长度分别为n和m,这种算法的时间复杂度O=m*n。现在对传统算法稍做改进,可在搜索过程中去掉重复比较的部分,优化搜索词每次移动的位数。
以搜索字符串ABCDABD为例:
A的前缀和后缀均为空,共有元素长度为0;
AB的前缀{[A]}与后缀{[B]}共有元素长度为0;
ABC的前缀{[A,AB]}和后缀{[BC,C]}共有元素长度为0;
ABCD的前缀{[A,AB,ABC]}和后缀{[BCD,CD,D]}共有元素长度为0;
ABCDA的前缀{[A,AB,ABC,ABCD]}和后缀{[BCDA,CDA,DA,A]}共有元素长度为1[A];
ABCDAB的前缀{[A,AB,ABC,ABCD,ABCDA]和后缀{[BCDAB,CDAB,DAB,AB,B]}共有元素最大长度为2[AB];
ABCDABD的前缀{[A,AB,ABC,ABCD,ABCDA,ABCDAB]和后缀{[BCDABD,CDABD,DABD,ABD,BD,D]}共有元素最大长度为0。
于是,ABCDABD的前缀和后缀最长公共元素如表1所示。
表1 字符串最长公共元素
按照新的匹配算法,搜索字符串移动位数为已经匹配的字符数减去对应的部分匹配值。要在字符串a中,搜索字符串b,算法流程(见图2)如下。
(1) 比对字符串a与b的第一个字符。
(2) 比对结果,B与A不匹配,字符串b后移一位。
(3) b的第一个字符A与a的第二个字符B不匹配,字符串b后移一位。
(4) 重复第一、第二步,直到发现字符串a有一个字符与搜索字符串b的第一个字符相同。
(5) 比对结果相同,则比较a和b的下一个字符。
(6) 重复前面的步骤,直到比对完字符串b的所有字符。
搜索词后移位数为已经匹配的字符减去部分匹配值。如果两个字符串的长度分别为n和m,经过优化后,算法的时间复杂度降低,O=m+n,提高了搜索效率。
图2 字符串搜索算法流程
3 系统功能及其实现
3.1 系统功能
系统功能包括气象自动站数据显示、机场气象数据监控、系统设置三大部分(见图3)。
(1) 显示地方气象自动站数据。读取宁夏各县区气象自动站数据,在Web页面上进行实时监控显示,每10 min自动刷新一次数据。地图显示等级为7级,用户双击鼠标,对百度地图进行缩放。鼠标点击相关县区气象站,会显示温度、湿度、风向、风速、气压、云高、雨量等详细气象要素。设有检索按钮,用户输入地点,点击检索,地图会自动定位到该地点,并显示相关气象数据。为有效监控自动站数据,地图上有数据的气象站添加红色覆盖物,无数据的则不添加。通过红色覆盖物,可判断站点资料是否完整。
(2) 监控机场气象数据。管理显示从机场获取的数据,读取机场气象自动站数据和发布的实况报文,显示在百度地图上。为方便预报员进行天气趋势判断,网页上显示最近3 h内的气象数据。
(3) 系统设置。对系统参数进行设置,管理本地自动气象站数据。可对本地自动气象站站点进行增加、删除;可设置报表默认输出目录,方便预报员对以往数据进行查看复盘;可设置复杂天气告警条件,如风速大于8 ms,能见度小于1 000 m等,达到预警阈值时,页面出现告警信息。
图3 系统功能结构
系统使用Windows 7自带的IIS(Internet 信息服务器)作为Web服务器,结合相关技术如Web Service、ASP.NET、SQL SERVER Agent等进行软件开发。系统框架结构分为3层,分别为表示层、业务逻辑层和数据访问层,在逻辑上相互独立,有利于后期系统的扩展(见图4)。
图4 系统架构
(1) 表示层。由气象信息监控和参数设置2个部分组成,采用浏览器服务器模式(BS)进行设计,在网页上对气象信息进行监控显示。当站点某个要素超过所设阈值时系统显示告警,同时将告警信息记录在后台,用户可对近期一段时间内的告警信息进行查询分析。通过参数设置,用户对系统进行控制,如设置站点数量、告警阈值、气象要素、文档默认输出目录等。用户可根据不同天气状况,灵活设置各项参数。
(2) 业务逻辑层。采用Java Script定时器和JQuery AJAX异步刷新技术。定时器每10 min循环启动一次,后台进程读取地方自动站气象资料和机场气象资料,并对资料进行解析,抽取所需气象要素和相关经纬度坐标。设置一进程,读取解析后的气象数据,根据经纬度坐标将数据在百度地图上进行加载显示。百度地图比较大,每次只需更新相关站点资料,无需重新加载全部地图。采用JQuery AJAX异步刷新技术,在不重新加载地图的情况下,更新站点数据。
(3) 数据访问层。由数据访问模块、图表配置访问模块和服务访问模块组成。数据访问模块,采用基于ADO.NET数据库访问技术,创建访问SQL SERVER数据库的程序接口。图表配置模块,读取气象资料,写入数据到XML文件进行配置。Fusionchart插件通过读取配置后的.XML文件,图形化显示近期复杂天气。
3.3 系统实现
3.3.1 JSON数据结构设计
JSON(JavaScript Object Notation)是存储和交换文本信息的一种语法,是一种轻量级的数据交换格式,类似于XML,但比XML更小、更快、更容易进行解析,通常用于在服务器之间进行数据交换。JSON数据结构包括映射集合({})、并列集合([])。JSON数据格式为:名称赋值,用“,”表示并列数据,用“:”表示映射。
系统包含宁夏地区部署的气象自动站实时气象数据、银川河东机场自动观测系统数据以及机场气象数据库报文数据,这些气象数据信息以JSON数据格式从服务器端传输给浏览器端。处理后的气象自动站系统数据如表2所示,提取后的机场气象数据库系统数据如表3所示。
表2 气象自动站系统数据元素
表3 气象数据库系统数据元素表
银川河东机场地处灵武市与贺兰县之间,灵武和贺兰的气象自动站数据对机场具有比较高的参考价值。以灵武、贺兰为例,其气象自动站数据的JSON格式为:
[{“city”:“贺兰”,“lng”:“|38.55”,“lat”:“106.35”,“wddir”:“北风”,“wdspe”:“8.2”,“pre”:“1013.1”,“tep”:“7.5”, “hum”:“42%”, “clo”:“NCD”, “rai”:“”}……]
以机场气象台发布的实况报文为例,银川河东机场气象数据库系统气象数据的JSON数据格式为:
[{“cccc”:“ZLIC”,“tt”:“SA”,“kk”:“37”,“cont”:“METAR ZLIC 220200Z 03002MPS 9000 NSC M06M16 Q1030 NOSIG=”, “temp”:“8.1”,“vis”:“9000”,“wddir”:“30”,“wdspd”:“02”,“pw”:“”,“hum”:“40%”}……]
3.3.2 机场近期复杂天气统计显示
为方便预报员准确分析近期天气,提升预报准确率,系统使用Fusionchart插件,结合XML语言、JavaScript访问气象数据库,将最近河东机场发生的复杂天气要素如大风、沙尘、能见度等以柱状条形图的形式显示在页面上。设置一函数,将取到的数据库值转化成XML格式,然后将数据传递给后台JavaScript;JavaScript利用获取的数据,结合Fusionchart插件,进行绘图显示。
3.3.3 气象数据的获取与显示
使用百度地图地理信息定位技术,构建基于站点定位的气象信息显示系统。为方便应用,系统设计分为2个部分。在系统界面左上角设计一个搜索对话框,在对话框中输入站点,可快速定位到相关站点,查看其信息。系统界面中间为宁夏地区各县市气象自动站信息,在此区域移动和点击鼠标时,会显示当地自动站气象信息。界面右边,统计显示银川河东机场自动观测系统近一年来的复杂天气要素如大风、沙尘、能见度的变化柱状图,鼠标经过柱状图时,数据自动进行局部刷新。
4 系统性能测试与评估
从字符搜索效率、实时性和系统稳定性3个方面,对系统进行分析评估。
4.1 字符搜索效率
传统算法的时间复杂度O=m*n,改进后算法的时间复杂度O=m+n,搜索速度有所提高。实验环境:Win7操作系统,内存4.0 G,操作平台是Visual studio 2012;选取的样本容量为10 MB数据的文本文档,匹配串为10~45字节,梯度为5。实验目的:测试传统算法和改进算法的字符搜索效率。测试结果见表4。
表4 两种算法的字符串搜索时间
从表4可以看出,与传统的搜索算法相比,改进后的算法优势明显。在字符串相同的情况下,改进后算法搜索所用时间,仅为传统算法用时的1.69%~1.85%。随着匹配字符串长度的增加,搜索用时有所增加,但增加幅度较小,也就是说匹配字符串的长度对算法结果的影响很小。
4.2 实时性
系统设置了定时器,每10 min对数据更新一次,保证了用户对数据的实时性要求。为加快数据响应,在鼠标移动时,实现局部站点气象信息刷新。鼠标移动至某个站点时,该站点的数据立即进行更新。系统采用AJAX异步传输技术,在不重新加载百度地图的情况下,实现单个站点更新气象数据,克服了全部站点一起更新而系统响应慢的问题。从技术上保障了实时性功能的实现,页面加载速度非常迅速,在日常业务应用中效果明显。
4.3 稳定性
选取2017年6月1日至8月1日为一个运行周期,测试软件系统运行的稳定性。软件系统在60×24 h不间断的运行环境下,未出现数据更新不及时、地图无法加载、用户无响应、运行速度慢等异常现象。在自动站数量达到一定规模时,系统均正常工作,无数据丢失现象出现。在这期间,用户均可以通过客户端进行访问。在2017年银川河东机场的气象保障、报文发布、风切变预警等多次气象服务中,该系统运行稳定,发挥了重要作用,效果明显。