APP下载

转换多时空层次Micaps格点数据文件为GrADS格式

2012-09-21李卫红陈增会

成都信息工程大学学报 2012年5期
关键词:数据格式格点数据文件

姚 愚, 李卫红, 罗 园, 陈增会

(昆明市气象局,云南昆明 650034)

0 引言

GrADS(Grid Analysis and Display System)是一套应用广泛、使用方便的科学数据绘图软件包,具有较强的数据计算和分析能力,可输出等值线、色温图、流线、风矢量、折线图、直方图等多样化的图形,已成为气象科研领域通用的标准图形环境之一[1-4]。目前气象台站预报业务中应用的多是基于Micaps系统的以文本格式存储的数据文件,GrADS只能识别以二进制格式存储的数据,必须编程实现将Micaps格式的数据文件转换为GrADS的数据格式,并生成相应的数据描述文件(CTL文件),才能由GrADS正确调用。以往关于这类格式转换的研究已较多[5-10],但大都只能对单个Micaps格式的数据文件进行转换,不能实现将多个变量、多个垂直层次和多个时间层次的数据写为一个GrADS格式的文件,CTL文件不能自动生成,限制了GrADS计算和作图功能的发挥。转换程序多在DOS环境下运行,操作不便,难以维护更新。在Delphi编程环境下,应用面向对象程序设计(OOP)的思想,利用类的封装性、继承性和多态性原理,编程实现便捷高效地将Micaps的4类和11类格点数据文件转换为GrADS格式的数据文件,克服了以往类似研究的不足,为气象数据的图形化操作提供支持。

1 基础类的设计

类是OOP中的核心概念[11-12],应用类的封装性、继承性和多态性原理可降低处理复杂问题的难度,提高程序开发效率,增加代码的可复用性和易维护性。根据具体问题进行类的设计是OOP程序开发的关键。GrADS格点数据文件是二进制顺序无格式流式文件,按经度、纬度、高度、变量和时间的次序排列。在最复杂的情况下,转换GrADS格点数据文件需要5重循环设计。Micaps系统利用目录名来区分变量种类和垂直层次,用文件名区分时间层次,用文件扩展名区分预报时效。Micaps格式的4类和11类数据文件分别存储画等值线和画风场流线的格点数据,存储格式均为“文件头+数据块”的形式。一个4类格式的文件存储一种变量一个时次一个高度层次的数据,按经纬度顺序排列,有一个“数据块”。11类格式文件基本与4类文件相同,只是存储了U和V两个变量,可看作有两个“数据块”。考虑到不同数据应用环境和用户对数据变量、垂直层次、时间层次和预报时效选择的多样性,针对以上GrADS和Micaps的数据文件存储特性,设计了如图1所示的类的继承结构用以转换Micaps格式的格点数据文件为GrADS的数据格式文件。

1.1 TTxtData2BinFile类设计

TTxtData2BinFile类主要功能是把字符串数组中的数据逐个分离并顺序写入二进制文件,它是图1中所有类的基类,其TxtData属性是一个字符串数据,用于存放用户选定的多个Micaps格式的4类或11类文件中“数据块”内容,BinFileName属性存放生成的二进制文件的文件名。WriteMessage过程记录类的执行信息至Mes-sageList属性中。GetDataFromStr过程用于逐一分离由空格分隔的字符串内容。GetBinFile过程用于将TxtData中的数据按顺序写入二进制文件,其主要代码段如下:

GetBinFile过程中SingleData不断循环赋值为从 TxtData中顺序分离的单个数据,再由BinFileStream的Write过程写入到文件流中,可视为完成了转换GrADS数据文件所需的5重循环中的按经纬度两重循环。全部数据写入完成后,调用BinFileStream的Free过程保存文件并释放对象。

图1 转换Micaps数据文件为GrADS格式的类继承结构

1.2 TM2G-Base抽象类设计

TM2G-Base抽象类由TTxtData2BinFile类继承而来,定义了由Micaps格式的数据文件转换为GrADS格式文件的接口。TM2G-Base类的内部属性保存了用户选择的每个Micaps的4类或11类格式文件的相关信息,包括Micaps文件的目录名、文件名和扩展名、高度层次、时间层次、变量名称、数据起止经纬度、格点数、经纬度分辩率、“数据块”个数等,这些信息将用于随后的数据转换过程中。

TM2G-Base类定义了一组方法用于获取上述文件信息,这些方法中有些是实方法,即在TM2G-Base类定义时即加以实现,主要用于获取Micaps的4类或11类文件的“文件头”中的信息及对TxtData中的“数据块”进行重排序。SetPara方法可从Micaps数据文件中获取“文件头”的起止经纬度、经纬度格点数、经纬度分辨率等信息。如果选定的Micaps数据文件的纬向分辨率小于0,表示该文件中数据由北向南排列,而GrADS格式文件中的数据缺省是由南向北排列,此时需调用ReverseYDirection方法对TxtData中的相应的“数据块”按行重排序。当转换Micaps格式的11类文件时,需调用Arrange11方法,将TxtData中对应“数据块”中U分量数据按次序集中排列,之后再放V分量数据,以适应GrADS对数据存放的要求。

利用类的多态性原理,在OOP程序设计时,可在基类定义通用数据接口,在基类的不同子类中去实现这些接口,以便在不同处理环境下对同一问题采用同一解决方案[11-12]。在实际应用中,不同用户对要进行转换的变量种类的选择各不相同,例如用户可选择Micaps高空实况数据(位于high目录下)、物理量数据(位于physic目录下)、T639数值预报产品(位于T639目录下)、欧洲中期数值预报产品(位于ecmwf目录下)或其它种类的数据文件进行转换,这些不同种类的Micaps文件数据格式相同,数据转换的操作步骤类似。为使程序功能易于维护、增加代码的复用性,并提供用户对Micaps数据文件选择的灵活性,本文将TM2G-Base设计为抽象类,在其内部成员中定义了一组虚函数(过程),用于获取用户在不同数据需求下所选择的每个Micaps文件的变量名称、目录名、数据文件类别、垂直层次、时间层次等相关信息,并保存至类的内部成员中。这些虚函数(过程)主要有:SetMicapsFilesList方法对所选每个Micaps数据文件的全路径名按垂直层次、变量名称和时间层次排序并存放至MicapsFilesList属性中,GetTxtDataFromMicapsFile方法按照MicapsFilesList属性中文件名顺序,逐一获取对应Micaps数据文件的“数据块”至TxtData成员中,相当于完成前述5重循环中的另外3重循环,SetOutputFileName方法确定生成的GrADS格式数据文件名和CTL文件名,WriteCTLFile方法根据保存的信息生成CTL文件内容。以上虚函数均在TM2G-Base类的子类中实现。例如图1中由TM2G-Base派生的TMicapsHigh2GradsFile类专门用于转换Micaps的高空实况数据,TMicapsPhysic2GradsFile类则用于转换物理量数据。还可从TM2GBase类派生出其它的类,以适应用户在不同数据需求下的对Micaps文件的多样化选择,如转换T639或欧洲中期数据预报产品的Micaps数据文件等。

图2是数据转换的流程图。

图2 Micaps格式数据文件转换为Grads格式文件的流程图

2 应用类的实现

2.1 TMicapsHigh2GradsFile和TMicapsPhysic2GradsFile类设计

TMicapsHigh2GradsFile类和TMicapsPhysic2GradsFile类均由TM2G-Base类派生,分别用于转换High目录和Physic目录下的4类和11类格点数据文件。它们同程序界面相关联,实现在TM2G-Base类中继承的各个虚函数(过程)。TMicapsHigh2GradsFile类可转换High目录下的高度场、温度场、温度露点差场、全风速场、流场共5种Micaps格式的数据文件,程序界面如图3(a)。注意用户所选择的多个Micaps格式的4类和11类数据文件应具有相同的起止经纬度和经纬度分辩率。TMicapsPhysic2GradsFile类的设计类似,它可转换Physic目录下的全部物理量数据文件,程序界面如图3(b)。

图3 转换High和Physic目录下Micaps格式的4类和11类数据文件的程序界面

2.2 程序运行

在图3(a)所示界面中,选择对2012年5月11日的5种实况数据的全部垂直层次进行转换,包括08时和20时2个时间层次,这些数据均位于high目录下,“UV-流场”是Micaps的11类数据文件,其余四种均是4类数据文件。点击“转换高空观测实况数据”按钮,生成GrADS数据格式文件High-120218-120219.dat和描述文件High-120218-120219.ctl,两个文件在GrADS操作环境下可正常使用,与原Micaps文件核对数据无误,按钮代码如下。图4(a)是用GrADS作的2012年5月11日08时500hPa的高度场和风场叠加图。

图3(b)所示界面中,选择对2012年5月11日的13种物理量数据的全部垂直层次进行转换,包括08时和20时2个时间层次,这些数据均位于physic目录下,均为Micaps的4类数据文件,点击“转换物理量实况数据”按钮,生成GrADS数据格式文件Physic-120218-120219.dat和描述文件Physic-120218-120219.ctl,在GrADS下打开后与原Micaps文件核对数据无误。图4b是用GrADS作的2012年5月11日08时沿25°N的水汽通量散度垂直剖面图。

图4 利用2012年5月11日的Micaps数据文件进行转换和作图

3 结束语

Micaps格式的格点数据文件转换为GrADS数据格式文件是气象台站预报和科研业务中常遇到的问题。本文应用面向对象程序设计(OOP)中类的封装性、继承性和多态性原理,根据Micaps的4类和11类格点数据文件的存储特征和GrADS二进制文件写入数据的规则,将数据转换过程中所需的5重循环设计、对11类数据文件中U和V“数据块”的重排序等步骤合理分解,并考虑到在不同数据环境和用户需求下对Micaps不同变量种类的数据文件选取存在多样性,利用Delphi设计了一组具有继承关系的类,实现了把多变量、多垂直层次和多时间层次的Micaps格式数据文件转换为GrADS数据格式文件的程序设计,并可自动生成CTL文件,有利于充分发挥GrADS强大的数据计算和作图功能。程序在Windows下运行,具有操作简便、界面友好、运行可靠的特点,其功能易于维护和扩充,例如可由TM2G-Base类派生其它的类,以适应不同操作环境和用户需求下转换数据的需要。

致谢:感谢昆明市科技局(昆科计字08S080002号)对本文的资助

[1] 刘辉权,肖天贵,邱静雅.气象预报预警系统开发中VB与GrADS、FORTRAN混合编程技术[J].成都信息工程学院院报,2011,26(2):208-214.

[2] 杨兆礼,万齐林.实例分析如何用GrADS实现NetCDF格式转换[J].广东气象,2008,30(5):47-49.

[3] 何瀚原,李清华,孙燕.利用GrADS软件绘制山西区域气象要素图[J].科技情报开发与经济,2007,17(7):302-303.

[4] 高文良,陈忠明,闵文彬.气象绘图软件GrADS使用要点[J].四川气象,2002,22(2):49-50.

[5] 吴艳青.GrADS绘图软件在台站业务中的应用[J].辽宁气象,2003,19(1):27-30.

[6] 李毓富,姬鸿丽,王贵鹏.用GrADS制作T639数值产品要素图[J].气象与环境科学,2009,32(增刊):315-319.

[7] 彭芳,吴古汇.GrADS绘图软件在Micaps站点资料的应用[J].贵州气象,2009,33(6):30-32.

[8] 叶朗明,管勇,苏耀墀.应用GrADS绘制Ncep再分析资料及Micaps格点资料[J].气象研究与应用,2009,30(增刊):117-118.

[9] 杨建民,王宗仁,张红英.GrADS脚本语言在格点资料转化中的应用[J].科技情报开发与经济,2007,17(31):196-197.

[10] 况雪源.GrADS绘图系统在站点等值线中的应用[J].广西气象,2001,22(2):53-56.

[11] Marco Cantu.DELPHI6从入门到精通[M].北京:电子工业出版社,2002:38-51,62-75.

[12] Kent Reisdorph.轻松掌握DELPHI4[M].北京:电子工业出版社,1999:2-3,70-97.

猜你喜欢

数据格式格点数据文件
带有超二次位势无限格点上的基态行波解
一种电离层TEC格点预测模型
带可加噪声的非自治随机Boussinesq格点方程的随机吸引子
数据文件恢复专题问答
数据文件安全管控技术的研究与实现
SQL数据文件恢复工具
世界首个可记录物体内部结构等复杂信息的3D打印数据格式问世
格点和面积
论子函数在C语言数据格式输出中的应用
基于特征库的测井数据格式自动识别与转换方法