城镇天气预报采集系统的设计与实现
作者:鲁玲
来源:《电脑知识与技术》2018年第10
        摘要:介绍了城镇天气预报采集系统的功能设计、数据库和数据表设计以及系统的实现,并列举了该系统设计的几个关键技术。该采集系统采用C#开发,通过广西气象宽带网采集城镇天气预报数据,更新当地基础气象数据库的数据表,为北海市气象现代化服务平台提供预报数据。通过业务应用证实,系统运行稳定、性能好。
        关键词:城镇天气预报采集系统;气象现代化;C#
        中图分类号:TP311 文献标识码:A 文章编号:1009-3044201810-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 br
oadband 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个表中创建StationIDDateCharTimeCharNtimesAreaNameTitleNElementTemperatureHumidWindWindDPressRainCloudTotalCloudLowWeatherVisibleMaxHumidMinHumidMaxTempMinTempRain24Rain12CloudTotal12CloudLow12Weather12Wind12WindD12ChangeStationNameLongitudeLatitudeAltitudeCityCounty等字段,分别表示区站号、预报起报的日期、时次、时效、地市编码、产品描述、预报要素个数、温度、湿度、风力、风向、气压、降水量、总云量、低云量、天气现象、是否可见、最大湿度、最小湿度、最高温度、最低温度、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,配置类dbConfigIniFile,工具类DBHelperTool,通用类DBHelperLoghelper。其中处理类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=1i++(此时i=2),从第2行获取“BFBH”;若i=2,从第3行获取预报的起报时间并转换为世界时;i++(此时i=3)。若i=3i++(此时i=4);若i=4i++(此时i=5),columnflag=true;若i=5,且(columnflag == true && sequrFlag == false)从第6行获取区站号信息和预报时效个数等信
息,为做好报文质量控制,此处要判断本方法参数中是否包含本市区站号。若不包含,则i=i+squrecont+1(此时i=5+14+1=20,即转到下一个区站号开始的那一行。若包含该区站号,则将第6行的相关数据赋值给longitudelatitude;将方法参数哈希表赋值给数组strstation,然后将数组元素再赋值给相关变量。i++(此时i=6),sequrFlag=true。若i>=6sequrFlag=true,循环将该站点的所有预报时效的预报信息获取。i=jisuanxunhuan=i+squrecount=6+14=20sequrFlat=false。若i=20,处理第20个报文数组,即报文的第21行。若i=20columnflag == truesequrFlag == false,按获取第1个站点预报信息的方法获取第2个站点的所有预报时效的预报信息。i=jisuanxunhuan=i+squrecount=21+14=35sequrFlat=false。若i=35 则处理第35个报文数组,即报文的第36行。若i=35columnflag == true sequrFlag == false,按获取第1个站点预报信息的方法获取第3个站点的所有预报时效的预报信息。