城镇天气预报采集系统的设计与实现

2018-06-02 08:50鲁玲
电脑知识与技术 2018年10期
关键词:北海市数据表天气预报

摘要:介绍了城镇天气预报采集系统的功能设计、数据库和数据表设计以及系统的实现,并列举了该系统设计的几个关键技术。该采集系统采用C#开发,通过广西气象宽带网采集城镇天气预报数据,更新当地基础气象数据库的数据表,为北海市气象现代化服务平台提供预报数据。通过业务应用证实,系统运行稳定、性能好。

关键词:城镇天气预报采集系统;气象现代化;C#

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2018)10-0075-03

Abstract: This paper introduced the function design, the design of database and data table and system implementation of collection system of urban weather forecast and enumerated several key technologies of the system. The collection system was implemented by C#. The system got the data of urban weather forecast through Guangxi meteorological broadband network, updated the data table of local fundamental meteorological database, which provided weather forecast data for Beihai meteorological modernization service platform. The operational application indicated the system performed stably and had good characteristics.

Key words: Collection System of Urban Weather Forecast; modernization of meteorology; C#

北海市气象现代化服务平台是北海市气象局业务单位使用的一个综合业务处理平台。该平台具有气象数据信息采集、监控、查询、展示、统计等功能,将各种气象实况数据、气象预报数据等与GIS技术结合优化,为北海市气象局日常业务提供技术辅助。北海市气象现代化服务平台集预报制作、预警应急、天气监测、分析指挥等功能为一体,充分融合和利用现有业务系统,建成统一信息采集、统一数据存贮、统一加工分析处理、统一产品制作、统一信息发布的集约化、智能化的综合气象业务服务平台。[1]

城镇天气预报采集系统是北海市气象现代化服务平台的一个后台数据处理软件。该采集系统通过广西气象宽带网获取指定目录下的城镇天气预报文件列表,对相关文件进行解码入库,更新当地数据库的数据信息,为服务平台的数据监控和城镇预报信息展示等模块提供数据支撑。该文介绍了该系统的功能设计、数据库和数据表设计以及系统的实现,并列举了系统开发使用的关键技术。

1 系统设计

1.1 城镇天气预报文件简介

城镇天气预报文件命名遵循《国内气象数据交换文件命名规范》,具体文件名为:

Z_SEVP_C_CCCC_YYYYMMDDhhmmss_P_RFFC-SPCC-YYYYMMDDhhmm-FFFxx.TXT。

城镇天气预报文件为ASCII文件,每个文件可以由一份或多份公报组成,每份公报的格式如下:

“ZCZC

FSCI50 CCCC YYGGgg (BBB)

产品描述

产品代码、预报的起报时间年月日时(世界时)

总站数

(第一个站):站号,经度(度), 纬度(度), 海拔高度,时效个数(时效可扩充),预报产品个数(预报要素可扩充)

12 預报结果 ………

24 预报结果……………………

………………………………………

(第n个站):站号,经度(度), 纬度(度), 海拔高度,时效个数(时效可扩充)、预报产品个数(预报要素可扩充)

12 预报结果 ………

24 预报结果……………………

………………………………………

NNNN”

城镇天气预报的预报要素主要应包含最高温度、最低温度、风向、风速和天气现象五个要素。[2]

1.2 系统功能设计

城镇天气预报采集系统通过广西气象宽带网定时扫描FTP服务器的相关目录,获取北海市指定站点在指定采集时间之后生成的城镇天气预报文件名列表,对相关文件进行解码入库,更新当地基础气象数据库的城镇预报采集数据表、城镇预报采集数据临时表和系统数据库的采集时间表。此外,系统记录运行日志信息。

1.3 数据库与数据表设计

为了对气象要素进行统一规范的存储和服务,保证气象数据的一致性和准确性,基础气象数据库(db_bh_qx)和系统数据库(db_bh_xt)的设计参考标准《QX/T 102-2009 气象资料分类与编码》、《QX/T 133-2011 气象要素分类与编码》。[3-4]建库后,在基础气象数据库(db_bh_qx)中创建城镇预报采集数据表(ForecastInfo)、城镇预报采集数据临时表(ForecastInfoTemp)和特殊服务站点信息表(SpecialServiceStation)等数据表。在系统数据库(db_bh_xt)中创建系统采集时间表(Collect_Time)等数据表。其中,城镇预报采集数据表(ForecastInfo)和城镇预报采集数据临时表(ForecastInfoTemp)的表结构是相同的,在这2个表中创建StationID、DateChar、TimeChar、Ntimes、AreaName、Title、NElement、Temperature、Humid、Wind、WindD、Press、Rain、CloudTotal、CloudLow、Weather、Visible、MaxHumid、MinHumid、MaxTemp、MinTemp、Rain24、Rain12、CloudTotal12、CloudLow12、Weather12、Wind12、WindD12、Change、StationName、Longitude、Latitude、Altitude、City、County等字段,分别表示区站号、预报起报的日期、时次、时效、地市编码、产品描述、预报要素个数、温度、湿度、风力、风向、气压、降水量、总云量、低云量、天气现象、是否可见、最大湿度、最小湿度、最高温度、最低温度、24小时降水量、12小时降水量、12小时总云量、12小时低云量、12小时天气现象、12小时风力、12小时风向、是否修改重新采集、站点名称、经度、纬度、测站高度、地市、区县等。城镇预报采集数据表(ForecastInfo)用于存储所有采集到的城镇天气预报数据,城镇预报采集数据临时表(ForecastInfoTemp)用于存储采集到的最近3个月的城镇天气预报数据。气象现代化服务平台城镇预报信息展示模块需要从城镇预报采集数据临时表(ForecastInfoTemp)查询数据。

在数据库管理系统创建及调度作业定时维护城镇预报采集数据临时表(ForecastInfoTemp)的数据,以确保该表只存储最近3个月的城镇天气预报数据,有利于提高数据查询效率,从而提高平台性能。

1.4 系统运行环境

城镇天气预报采集系统运行于Microsoft Windows Server 2012 R2 Standard,开发平台为Microsoft Visual Studio 2010,编程使用C#语言,数据库管理软件为SQL SERVER 2014。

2 系统实现

2.1 自定义类的设计

通过对城镇天气预报采集系统进行合理的功能分解,系统开发时设计了处理类CityForecast,配置类dbConfig和IniFile,工具类DBHelperTool,通用类DBHelper和Loghelper。其中处理类CityForecast的设计及相关说明如表1所示。

配置类dbConfig用于获取系统配置文件的路径及配置文件的有关信息,IniFile类用于读取初始化文件。工具類DBHelperTool用于建立数据库连接,通用类DBHelper用于执行非查询类SQL语句,Loghelper类用于记录系统运行日志。

2.2 城镇天气预报数据采集流程

writeToDB 是CityForecast类的一个方法,用于实现解析报文及入库功能,其工作流程如图1所示。

采集系统在对城镇天气预报文件进行处理时,将每行报文视为一个ArrayList集合类对象arrylist[],每个对象转换成字符串后再进行分割,生成新的String类对象data。

下面以城镇天气预报文件Z_SEVP_C_BFBH_20170923083000_P_RFFC-SPCC-201709231200-16812.TXT为例,说明城镇预报数据采集流程。

该文件的前5行内容如下:

“ZCZC

FSCI50 BFBH 230830

2017092312时北海市气象台预报产品

SPCC 2017092312

3”

从第6行至第50行是北海市3个站点的站点信息和14个时效的预报结果。

首先设置数组data,将每行报文转换为字符串line,将每个字符串line再分割成21个数组data。若i=0,解析报文;i++(此时i=1),columnflag=false;若i=1,i++(此时i=2),从第2行获取“BFBH”;若i=2,从第3行获取预报的起报时间并转换为世界时;i++(此时i=3)。若i=3,i++(此时i=4);若i=4,i++(此时i=5),columnflag=true;若i=5,且(columnflag == true && sequrFlag == false)从第6行获取区站号信息和预报时效个数等信息,为做好报文质量控制,此处要判断本方法参数中是否包含本市区站号。若不包含,则i=i+squrecont+1(此时i=5+14+1=20,即转到下一个区站号开始的那一行。若包含该区站号,则将第6行的相关数据赋值给longitude和latitude;将方法参数哈希表赋值给数组strstation,然后将数组元素再赋值给相关变量。i++(此时i=6),sequrFlag=true。若i>=6且sequrFlag=true,循环将该站点的所有预报时效的预报信息获取。i=jisuanxunhuan=i+squrecount=6+14=20,sequrFlat=false。若i=20,处理第20个报文数组,即报文的第21行。若i=20,columnflag == true且sequrFlag == false,按获取第1个站点预报信息的方法获取第2个站点的所有预报时效的预报信息。i=jisuanxunhuan=i+squrecount=21+14=35,sequrFlat=false。若i=35, 则处理第35个报文数组,即报文的第36行。若i=35,columnflag == true 且sequrFlag == false,按获取第1个站点预报信息的方法获取第3个站点的所有预报时效的预报信息。

为了保障系统的健壮性,在编写程序时对可能产生异常的程序代码进行监控,使用异常处理语句“try…catch”处理异常,可以避免程序执行时可能导致中断的各种错误。

2.3 项目配置

在项目配置文件中添加城镇天气预报采集参数,包括FTP服务器IP地址、城镇天气预报采集目录、登录用户名及密码等。此外,还要添加基础气象数据库(db_bh_qx)和系统数据库(db_bh_xt)的配置信息。通过dbConfig类可以读取这些配置信息。

2.4 系统界面

城镇天气预报采集系统界面如图2所示:

在实际应用中,编写一个批处理文件,该批处理文件代码如下:

“ taskkill /f /im 城镇天气预报采集系统.exe

start "" "D:\北海数据采集\城镇天气预报采集系统.exe" ”

在任务计划程序中设置该批处理文件无限期每隔1小时自动运行一次,则可正常采集北海城镇天气预报数据。

3 系统设计关键技术

3.1 DotNetBar组件的使用

DotNetBar组件提供了类似office 2007风格的用户界面组件,相对于.NET默认界面更加美观。在系统安装该组件后,打开Visual Studio 2010软件,鼠标右击项目,选择“属性”,将目标框架更改为.NET Framework 4。鼠标右击项目,选择“添加引用”,在“.NET”中选择组件“DevComponents.DotNetBar”,在程序代码中添加using DevComponents.DotNetBar即可使用该组件。

3.2 文件及I/O操作类的使用

实现文件收集、文件处理需要对文件进行大量的操作。C#中与文件、文件夹及文件读写有关的类都位于System.IO命名空间下,该命名空间包含允许在数据流和文件上进行同步/异步读取及写入的类。系统开发时用到了System.IO命名空间中的Directory、FileInfo、FileStream、StreamReader等类。[5]

3.3 ArrayList集合的使用

ArrayList类位于System.Collections命名空间下,它可以动态地添加和删除元素。ArrayList的容量可以根据需要自动扩充,提供添加、删除和插入某一范圍元素的方法。[4]采集系统在对城镇天气预报文件进行处理时,将每行报文视为一个ArrayList集合类对象arrylist[],每个对象转换成字符串后再进行分割,生成新的String类对象data。

3.4 SqlHelper类的使用

SqlHelper类位于System.Data.SqlClient命名空间下,是对数据库操作方法进行封装的类。它可以简化我们重复写的那些数据库连接语句,使用者可以更方便地对数据库进行操作。SqlHelper类主要有ExecuteReader、ExecuteScalar、ExecuteNonQuery等方法。

系统开发时,在编写GetLasterCollectTime、SaveToDB、writeToDB方法代码中使用了SqlHelper类。

4 结束语

北海城镇天气预报采集系统界面简洁友好,性能稳定可靠。在北海市气象局进行业务运行以来,能正常采集北海城镇天气预报数据,为北海市气象现代化服务平台的数据监控和城镇预报信息展示模块等提供了数据支撑。系统程序代码易于管理和维护,对类似系统的开发有参考价值。

参考文献:

[1] 鲁玲, 卢绍宗. 应用MUSIC开发北海区域自动气象站采集系统[J]. 安徽农业科学, 2016, 44(32): 179-183.

[2] 王萍, 唐兵兵, 耿晋玲. 精细化城镇天气预报的有效打包和传输[J]. 气象研究与应用, 2009, 30(增刊1): 182-183.

[3] 熊安元, 王伯民, 王颖, 等. 气象资料分类与编码[S]. 中华人民共和国气象行业标准QX/T 102-2009. 北京: 气象出版社, 2009.

[4] 熊安元, 朱燕君, 王伯民, 等. 气象要素分类与编码[S]. 中华人民共和国气象行业标准QX/T 133-2011. 北京: 气象出版社, 2011.

[5] 王小科, 赛奎春, 刘志铭, 等. C#开发实战宝典[M]. 北京: 清华大学出版社, 2012: 134, 407, 408.

猜你喜欢
北海市数据表天气预报
北海市西村港跨海大桥主桥总体设计
北海市冯家江水质监测与评价
基于列控工程数据表建立线路拓扑关系的研究
测不准的天气预报
天气预报的前世今生
中期天气预报
小小天气预报员
图表
基于VSL的动态数据表应用研究
北海市少年儿童图书馆举行“2013全国少年儿童阅读年”启动仪式