内蒙古气象局预报质量考核系统设计与实现
2017-10-12◆贾东
◆贾 东
(赤峰市气象局 内蒙古 024000)
内蒙古气象局预报质量考核系统设计与实现
◆贾 东
(赤峰市气象局 内蒙古 024000)
内蒙古气象局预报质量考核系统于2011年正式上线,是拥有自主知识产权的预报业务系统,主要应用于全区气象部门的城镇天气预报、灾害性天气落区预报的质量考核。经过连续连续五年的建设,目前已经实现业务化稳定运行,支撑了自治区气象局预报质量考核工作,同时发展成为各盟市气象局质量分析的最主要工具,促进了全区预报准确率的稳步提高。系统采用目前先进Nutz框架结构和html5语言实现,最大限度的提高Web开发能力,解决第三方类库在Web项目开发中的低效问题,用最少的代码做最多的事情。
预报质量;Nutz框架;java web应用;B/S结构;Bootstrap开发
0 引言
内蒙古自治区预报质量考核系统基于java web开发的B/S结构应用平台,并且结合了目前先进的 Nutz框架结构和Bootstrap等多种前后端开发语言实现,在平台的可维护性、可扩展性和系统的兼容性上有非常大的优势。该系统对全区天气预报质量检验和预报员个人预报质量客观化考核起到支撑作用,有效地促进了全区预报准确率的提高,据中国气象局国家气象中心统计数据显示,近四年来全区48小时内气温预报准确率提高幅度达到7%以上,其中24、48小时最高温度预报准确率分别提高10%、9.5%,最低温度预报准确率提高了6.6%、7%。相对国家指导预报技巧更是实现跨越式进展,在全国31个省(直辖市、自治区)的24小时技巧排名中,高温技巧由2010年第28名提高到2014年第3名,低温技巧由第29名提高到第6名。
1 系统结构设计
根据实际需求,系统分为后台数据采集及运算、前台数据查询显示两大部分。后台数据采集及运算是整个平台的基础,采用Java语言实现模块功能。主要负责天气实况、盟市预报、国家指导预报、区局指导预报、灾害落区预报等基础数据的采集工作,根据相应算法计算出评分结果数据、日统计数据、月统计数据、灾害落区数据、个人质量数据、风检验数据等并入库保存;前台数据查询与显示页面是面向全区预报员用户的窗口,采用目前先进的html5语言、Bootstrap前端开发框架和Nutz框架技术实现,负责盟市评分、全区评分、灾害评分、全区个人排名等模块的查询显示和数据下载功能及值班登记、个人预报上传等功能。
图1 预报质量考核系统功能结构图
2 总体设计思路
内蒙古自治区预报质量考核系统采用java语言及html5语言开发的一款基于B/S结构的Java web应用平台,后台数据采集模块每日定时从区局数据库和各盟市上传预报目录中进行数据的采集与解析,主要包括天气实况数据、盟市预报数据、区台指导数据、灾害预报数据等基本数据。设定平台的数据采集模块每天定时运行,从区局数据库采集数据,然后把数据入库到平台数据库中,在此过程中要注意对异常数据的处理。数据采集完成后,开始使用不同的预报检验算法对全区台站各项预报质量进行计算,并把得到的结果存入数据库中。前端 web页面服务使用Tomcat作为应用服务器,用户通过浏览器访问系统(目前访问地址为:http://10.62.11.102)。并且对于一些基本的服务器信息,如区局基本资料的存放地址、报文的存储路径等信息都存放在系统的配置文件中,当服务器信息有变动时,无需修改源代码,只需修改配制文件即可,方便系统的扩展和移植。
2.1 基础数据采集与计算
系统的运行依托于大量基础数据的采集和计算,包括盟市预报、国家指导报、区局指导预报、灾害落区预报、天气实况数据。目前基础数据的采集分两种方式,常规方式为从区局信息中心数据库进行采集,采用数据库直接连接方式;备份采集方式为区局目录报文读取,采用FTP连接方式。这样做的好处在于当一路数据采集遇到故障时可通过另一方式进行数据采集,大大地提高了数据的完整性。数据采集完成后,对这些基础数据按照盟市、时次、时效、站号、日期等要素进行分类计算,并对其中的异常数据进行容错性处理,保证计算结果的正确。如对数据中“9999”,“null”的处理和对报文中“////”的处理,另外在报文读取中还要注意更正报的判断,保证读取到最新的预报数据。如在当日运行时间内由于报文或数据的缺失导致数据无法录入,可实现对数据的补录与更新操作。在程序中通过Nutz Dao技术进行数据库的连接和读取写入操作,提高了数据库的访问速度,减少了数据库的压力。
2.2 数据完整性检查
容易出现数据不完整的地方有两种,一种是基础数据的缺失。数据的录入与计算过程中,由于基础数据的不完整或者读取中出现的数据连接异常错误,会导致某些要素的评分结果不准确。这就要对数据的完整性进行检查。在后台采集模块中,当日数据采集完成后,会对预报数据和实况数据进行检查,根据全区台站数和所发预报数量进行对比,把缺失数据的站台信息统一入库,形成数据缺失表,可在前台显示页面中的系统管理模块中查看。另一种是计算后形成的中间数据的缺失。在数据采集与计算过程中,出现如网络中断、数据计算异常、服务器故障时,都会中断采集模块的正常运行,从而导致中间关键环节的数据缺失,在程序设计上采用日志的方式对采集模块的运行进行记录,从运行日志中可以很方便的看出程序运行情况,哪些环节的运算出现错误等信息,方面管理人员对所缺失的数据进行查询补录工作。
2.3 前端web服务器搭建
前端web应用使用Tomcat搭建服务,Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,是开发和调试 JSP 程序的首选。首先需要安装 JDK(java development kit) Java 语言的软件开发工具包。然后进行 tomcat环境变量的配置。具体配置内容如下:
JAVA_HOME= C:Program FilesJavajdk1.6.0
TOMCAT_HOME= d:myjava omcat 6.0
CLASSPATH=.; C:Program FilesJavajdk1.6.0lib;
服务搭建完成后,把项目发布到服务器端,即可通过浏览器访问。
2.4 关键技术的应用
项目使用了目前比较先进的nutz技术,通过nutzDao可以很方便的实现对数据库的连接,访问等操作。在web应用中需要在配制文件web.xml中进行相应配制。nutzIoc将一部分关于对象的依赖关系单独存储在某种介质里,并且提供一个接口帮助使用者获得这些对象。在今后的项目开发中,如数据库地址、用户名和密码发生改变时,不需要进行Java代码的重新编译,在此配置中修改即可。
NutzMvc是要和一个 Web 服务器(比如本系统使用的Tomcat)一起工作的,它存在的意义就是要把一个标准的 HTTP请求,转发到某一个 Java 函数中。可进行参数的解析并提供几个基本的渲染方式(比如 JSP, JSON)每一种 HTTP 请求,在函数上声明一个注解,这个注解,在程序中使用以下代码@IocBean(name="dataservice"),在需要引用该类中使用dataservice ds=IocInit.iocb.get(dataservice.class," dataservice ")得到类的声明。
3 核心算法的实现
天气预报质量检验中需要大量的专业计算公式,参照《全国城镇天气预报质量国家级检验方案》和《中短期天气预报质量检验办法》进行了大量公式的总结、分析与演算,并最终在程序中实现。
3.1 降水分级检验算法与实现
将降水量分为小雨、中雨、大雨、暴雨、大暴雨、特大暴雨和小雪、中雪、大雪、暴雪10个等级(见表1),检验各级降水、一般性降水[小雨(雪)至大雨(雪)]和暴雨(雪)以上(暴雨至特大暴雨和暴雪)预报情况。累加降水量级检验:检验对≥0.1mm、≥10.0mm、≥25.0mm、≥50.0mm降水的预报情况。
3.2 温度预报评分算法实现
其中,Fi为第i站(次)预报温度,Oi为第i站(次)实况温度,K为1、2,分别代表NrK为预报正确的站(次)数,NfK为预报的总站(次)数。
温度预报准确率的实际含义是温度预报误差≤1℃(2℃)的百分率。
4 主要功能模块的技术实现
从整体模块功能分布上来看,平台包括面向用户的页面显示功能,基于查询结果的报表生成功能,图表显示功能,基础数据录入功能及其它一些系统维护与监测功能。
4.1 报表生与下载模块的实现
图2 风检验图表显示页面
Java Excel俗称jxl,是一开放源码项目,通过它可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。使用该API非Windows操作系统也可以通过纯Java应用来处理Excel数据表。因为是使用Java编写的,所以我们在Web应用中可以通过JSP、Servlet来调用API实现对Excel数据表的访问。通过java操作excel表格的工具类库,支持Excel 95-2000的所有版本,生成Excel 2000标准格式,支持字体、数字、日期操作,能够修饰单元格属性,支持图像和图表。
4.2 图表生成模块实现
图表功能使用 Echarts图表库实现。它基于 Canvas,纯Javascript图表库,提供直观、生动、可交互、可个性化定制的数据可视化图表。创新的拖拽重计算、数据视图、值域漫游等特性大大增强了用户体验,赋予了用户对数据进行挖掘、整合的能力。可生成折线图、柱状图、k线图等图表的实现,可在生成的图表上进行一些拖拽重计算特性,带来了数据统计图表从未有过的用户体验,允许用户对统计数据进行有效的提取、整合,甚至在多个图表间交换数据。具体实现步骤:
(1)需要在页面通过为ECharts准备一个具备大小(宽高)的Dom。
(2)引用所用的jar文件:
(3)进行相关配制写入:
require.config({paths:{echarts:'js/dist'}});
var option = { legend: {data: ['主班', '全区平均', '指导','指导平均']},
color: ['#ff7f50', '#da70d6', '#87cefa', '#32cd32', '#6495ed','#ff69b4', '#ba55d3', '#cd5c5c', '#ffa500', '#40e0d0'],
toolbox: {show: true, feature: {mark: {show: true},
dataView: { readOnly: false},
magicType : {show: true, type: ['line', 'bar']},
restore: {show: true},
saveAsImage:{show: true} }},
calculable: false,
animation:false,
animationDuration: 10,
xAxis: [{type: 'category', boundaryGap: true, }],
series: [{name: '主班', type: 'bar', barGap:2, itemStyle: {
normal: {lineStyle: {shadowColor: 'rgba(0,0,0,0.4)'},
label : {show : true}}}},
name: '全区平均', type: 'line', itemStyle: {normal: {lineStyle: {
shadowColor: 'rgba(0,0,0,0.4)'}}}}
图3 高温2度24小时图表显示
5 结论
当前正值现代天气业务、服务型业务建设迅速推进时期,内蒙古天气预报质量考核系统的全面网络化形式、全面的功能设计、统一的数据管理、公开透明的检验形式正好满足了时代发展和业务改进的需要。Java语言、nutz框架、bootstrap等先进的语言与设计工具的应用,使平台在整体布局上层次分明,结构清晰。功能的模块化实现,使平台在可扩展性与可维护性上面有很强的优势。通过三年多的全区业务应用,也充分证明了该系统功能实用、技术先进、运行稳定、为我区预报质量的检验提供了一个非常必要的平台。
[1]梁勇.Java语言程序设计[M].机械工业出版,2011.
[2]李绪成.java语言程序设计(java7) [M].清华大学出版社,2014.
[3]Y Daniel Liang.Java语言程序设计基础篇[M].机械工业出版社,2008.
[4]孙卫琴.Java面向对象编程[M].电子工业出版社,2006.
[5]李刚.疯狂Java讲义[M].电子工业出版社,2012.
[6]梁勇. Java深入解析——透析Java本质的36个话题[M].电子工业出版社,2013.
[7]孙卫琴.Tomcat与Java Web开发技术详解(第2版) [M].电子工业出版社,2009.