摘要:广西气象部门2014年开始进行乡镇一级的精细化预报工作,经过多年试运行,精细化预报准确率逐年提高。及时准确识别精细化预报原始报文,转换成电视《天气预报》节目编辑系统所需报文格式,是电视节目编辑工作重要环节。本文对精细化预报产品报文识别转换程序设计进行探讨。
关键词:精细化预报;产品报文;识别转换;程序设计
根据桂气预函〔2014〕43号的规定,利用MICAPS开展所有县(区、市)的乡镇精细化天气预报业务试运行工作,每天定时制作发布08、20时(北京时,下同)未来72小时内的乡镇精细化天气预报业务指导产品,预报间隔为12小时,报文编码、格式、文件名等都采取精细化预报产品文件格式。
一.识别转换程序开发的主要原因
电视《天气预报》节目制作系统需要从乡镇精细化预报报文中获取预报结论,百色市共12个县区100多个乡镇,如果单凭手工打开报文文件,再逐一查找站点,再识别报文,手工记录,将会消耗大量时间,且工作量巨大,容易出现人为疏忽错误。按照有关规定电视《天气预报》节目必须在结论出来后一个半小时内制作好,对熟悉这些电码的气象地面观测人员和预报人员来说,确实有一定难度。对于一些刚参加工作的同志或者非气象专业的气象信息服务人员来说更是困难。这就迫切需要准确及时的识别转换乡镇精细化预报报文。
二.开发工具
系统采用Microsoft公司开Visual C#编程语言进行开发。Visual C#是 Visual Studio.NET 中引入的一种新编程语言,设计 C# 是为了建立运行于.NET 平台上的、范围广泛的企业级应用程序。用 Visual C# 编写的代码被编译为托管代码,这意味着它将受益于公共语言运行库的服务。这些服务包括:语言互操作性、垃圾回收、增强的安全性以及改进的版本支持。基于Visual C#的优异性能,达系统高效、稳定等运行奠定基础。
三.开发难点与解决方法
(一)识别相应时次不同地市的报文文件
我们主要使用的是百色市每天08时30分(世界时)上传的精细化预报产品,首先就必须让程序能在精细化预报产品保存的目录下找出当天所需要识别转换的相应文件。
1.精细化预报产品文件名命名规则。精细化预报产品传输文件命名遵循《国内气象数据交换文件命名规范》,具体文件名如下:
Z_SEVP_C_CCCC_YYYYMMDDhhmmss_P_RFFC-TYPE-YYYYMMDDhhmm-FFFxx.TXT
文件名编码说明:Z:固定编码,表示国内资料;SEVP:固定编码,表示气象服务产品;C:固定编码,表示后一字段为编报中心;CCCC:表示发报中心,只能为各省的编码,不能使用地市等其他编码;YYYYMMDDhhmmss:表示文件生成时间年月日时分秒,用世界时(UTC);P:表示服务产品;RFFC:固定编码,表示精细化预报;TYPE:表示预报种类,广西各地市订正预报产品对应的是SPCCYYYYMMDDhhmm:表示预报起报的年月日时分,用世界时(UTC);YYYY:为4位年MMDD:分别为两位月和日hhmm:为起报时间的两位时和两位分(UTC)FFFxx:FFF:最大预报时效(以小时为单位)Xx:最大预报间隔(以小时为单位)TXT : 固定编码,表示文本格式。以百色市2019年10月4日08时30分(世界时)上传的订正预报为例,其起报时间为2019年10月4日12时00分(世界时),最大预报时效为120小时,最大预报间隔为12小时,其文件名就为:Z_SEVP_C_BFBS_20191004083000_P_RFFC-GXXZ-201910041200-12012.TXT。
2.程序识别文件名和下载文件方法。了解了文件命名的规则,发现对于广西08时30分(世界时)上传的精细化预报产品文件名可以归纳为:Z_SEVP_C_BFXX_YYYYMMDD083000_P_RFFC-GXXZ- YYYYMMDD1200-12012.TXT。其中“Z_SEVP_C_BF”为固定,“XX”则为不同地市的不同代码,“YYYYMMDD”则为日期,“083000_P_RFFC-GXXZ-”和“1200-12012”为固定 “.TXT”也为固定的文本文件格式。这样为了找到当日08时30分百色市上传的精细化预报产品文件,则可用以下代码实现:
testfile="\\..\fp\Z_SEVP_C_BFBS_"+syear+smonth+sday +”083000_P_RFFC-GXXZ-"+syear+smonth+sday +"1200-12012.txt"。其中syear、smonth、sday分别为系统当日的年、月、日。
(二)识别预报结果
主要是根据站号识别转换各地市的24、48小时的最高、最低温度、天气现象以及风向风速。
1.精细化预报产品文件内容格式。精细化预报产品为ASCII文件,文件格式如下:
ZCZC FSCI50 CCCC YYGGgg (BBB);产品描述;产品代码、预报的起报时间年月日时(世界时);总站数;(第一个站):站号,经度(度),纬度(度),海拔高度,时效个数(时效可扩充),预报产品个数(预报要素可扩充)003预报结果……;006预报结果……;…… ;(第n个站):站号,经度(度),纬度(度),海拔高度,时效个数(时效可扩充)、预报产品个数(预报要素可扩充);003预报结果……;006预报结……;……;NNNN。预报要素主要应包含最高、最低温度、风向、风速和天气现象五个要素。其中,天气现象、风向、风速的预报值应以保留一位小数的实数形式填写在预报文件中各预报时段项的第19、20、21列;最高最低温度的预报值应以保留一位小数的实数形式填写在预报文件中的24、48、72、96、120小时预报时段项的第11和12列。
2.程序实现预报结果识别。通过观察文件格式可以看出,打开文件后,首先需要识别的是第5行“总站数”,第六行为第一个站点的预报背景信息;第七行起每一行为第一个站点一个预报时刻的预报结果,依此类推,逐站预报。因此,在程序中对打开文件先进行整行读取,为提高效率,只有在读取到需要用到的行时再将该行中用空格隔开的各列赋值到数组中,然后再从数组中的相应位置读出所需要最高、最低温度、风向、风速和天气现象编码,再根据编码表将编码转换为文字,再显示出来。程序代码如下:
testfile="\\..\fp\Z_SEVP_C_BFBS_"+syear+smonth+sday +”083000_P_RFFC-GXXZ-"+syear+smonth+sday +"1200-12012.txt";string[] currentRow;//建立一个StreamReader对象;using (StreamReader reader=new StreamReader(testfile,Encoding.Default));{String str=reader.ReadLine ();char[] separator={ ' ' };currentRow=str.Split(separator)……}。
3.生成电视《天气预报》节目编辑系统需要的报文。把所有转换出来的文字按需要的站名顺序排好,再通过程序写入到指定的目录下的指定文件中,程序代码实现如下:file3="\\..\bs121\txt\06.txt" //指定路径和文件名//使用File类的AppendText方法建立一个StreamWrite对象using (StreamWrite writer=new StreamReader(file3,Encoding.Default)){……writer.Write(txt2);//写入内容,txt2为排好的文字……}。
四.小结
图1 程序界面
图2 识别转换显示结果
此报文识别转换程序设计合理、操作简单,程序界面如图1所示,百色市上传的精细化预报报文转换出的德保县各乡镇的预报结果如图2所示。程序自投入使用以来,经过不断摸索和改善,已经能够实现所需功能。原来人工进行识别转换所有需要的报文需8~15分钟,现在几秒钟之内就能完成识别转换并生成相应文件,大大提高了工作效率,为气象预报的准确及时发布赢得了宝贵的时间。
参考文献
[1]陆杰等.测风报扩充报文相对时间编码的解析[J].广西气象,2004.
[2]容军等.“小、灵、快”打造电视气象节目新特色[J].广西气象,2004.
作者简介:黄学忠(1972.03-),男,壮族,广西百色市人,本科学历,广西百色市气象局工程师,主要研究方向:气象科技服务。
论文作者:黄学忠 岑瀚 姚学民
论文发表刊物:《知识-力量》2019年11月53期
论文发表时间:2019/12/6
标签:报文论文; 精细化论文; 百色市论文; 产品论文; 文件论文; 广西论文; 文件名论文; 《知识-力量》2019年11月53期论文;