赵春燕 王彬,2,3* 孙婧 肖华东,2,3
(1 国家气象信息中心,北京 100081; 2 中国气象局地球系统数值预报中心,北京 100081;3 灾害天气国家重点实验室,北京 100081)
在开展天气预报、气候预测、气象服务和气象科学研究中,气象数据的应用是重要基础支撑[1],面向不同的应用需求,需要对气象数据进行解析处理或进行格式转换来更便捷地接入以参与信息交换。随着地球系统大数据时代[2]的发展,气象数据的来源更加丰富、种类繁多格式复杂[3],数据量巨大,气象数据的应用需求也随之更为复杂和广泛。常用的气象数据格式[4]包括二进制格式、NetCDF(Network Common Data Form)、HDF(Hierarchical Data Format)、GRIB(General Regularly-distributed Information in Binary Form)、BUFR(Binary Universal Form for the Representation)和MICAPS(Meteorological Information Comprehensive Analysis and Processing System)数据。GRIB[5-6]主要用来存放数值天气分析和预报的格点资料,目前有两个版本GRIB1和GRIB2。NetCDF[7]是美国大学大气研究协会(UCAR)面向数组型并适用于网络共享数据模式和编码标准格式,如美国国家环境预报数据中心(NCEP)发布的再分析资料即采用NetCDF格式。HDF[7]数据格式是美国国家高性能计算应用中心(NCSA)研制的,是一种具有自描述性、可扩展性、自我组织型的数据存储格式,多用于卫星资料的存储和发布,有HDF4和HDF5版本。气象数据中还包括一些二进制文件,如气象雷达的数据。MICAPS系统[8-9]是中国气象局自主研发的现代化人机交互气象信息处理和天气预报制作系统,已发展到MICAPS4[9]。
气象领域发展了多种气象数据处理分析工具,各有特点。GRIB 编解码工具有两种GRIB API[10]和WGRIB[11-12]。GRIB API 是欧洲中期天气预报中心(ECMWF)开发, 提供C++、Fortran、Python的API和命令行,后由ecCodes[13]升级替代,并发展了CodesUI[14]可视化工具,支持GRIB和BUFR格式数据解读。WGRIB是NCEP开发,提供C、Fortran、Python的API和命令行,用于解码和处理GRIB格式数据,支持OpenMP并行处理。Climate Data Operators(CDO)是一款跨平台气象数据分析处理工具[15],支持GRIB 1/2, NetCDF3/4, SERVICE等格式数据的解析修改、提取合并、选择比较、统计分析、回归和插值、算术运算、向量和谱变换等,支持并行处理。NetCDF Operator(NCO)是跨平台的命令行数据分析工具[16],支持NetCDF和HDF格式数据的属性编辑、算术运算、二进制运算、集合平均、插值、统计、平均等,提供命令行和批处理。此外,业内还发展了一些集成工具,MeteoInfo[17]是集成GIS和科学计算环境的气象数据可视化和分析软件,支持NetCDF、HDF、GRIB1、GRIB2、MICAPS等格式数据的可视化分析,支持MICAPS4-NetCDF、MICAPS-GrADS的格式转换。Panoply[18]是美国国家航空航天局(NASA)开发的基于JAVA的气象绘图软件,支持NetCDF、HDF、GRIB1、GRIB2等格式数据的绘图分析。表1比较分析了MeteoInfo、Panoply、WGRIB、ecCodes/CodesUI、CDO、NCO的特点。
表1 气象数据解读分析工具分析比较
以上工具主要实现数据解读分析和处理计算,但对不同格式数据之间转换功能的支持薄弱,缺乏一个通用的气象数据解析和格式转换工具,便捷读取各种格式的气象数据及进行格式转换。
本文设计了一个通用的气象数据解析和格式转换工具METPAD,实现对主要气象数据的自动解读说明,并支持NetCDF、GRIB、HDF、MICAPS等格式的一键转换,提供可视化终端和命令行。
METPAD采用分层集成设计,在核心的业务支撑层集成各类底层数据编码、解码算法及中间件实现对各类数据的解析和格式转换。
模式数据格式转换工具整体架构分为基础支撑层、数据层、业务支撑层和应用层,如图1所示。
图1 设计框架
基础支撑层包括高性能计算机提供命令行工具部署环境和数据存储环境。
数据层主要是各类气象数据,包括ECMWF数值预报模式产品、GRAPES数值预报模式产品等和自定义的模式数据,以及MICAPS类型的数据等。
业务支撑层是程序的各种算法,包括MICAPS数据解码算法、NetCDF数据解码算法、HDF数据解码算法、GRIB数据解码算法、各种类型数据之间的转换算法等。
应用层是系统直观界面展示,提供了桌面版的应用程序和Linux命令行工具。桌面应用程序支持用户交互,命令行工具为用户提供数据读取和格式转换命令,支持批量转换。
METPAD工具设计了Linux命令行工具和Windows桌面应用程序。面向数据应用环境提供Linux命令行工具,主要实现NetCDF,HDF,MICAPS,GRIB1,GRIB2等数据类型的解析、相互转换和多种数据之间的批量转换,并提供基础的数据分析,便于在数据处理环节使用和调用。面向用户终端应用提供Windows桌面应用程序,实现数据的解读、展示和基础分析,支持用户打开和解读不同类型的气象数据,显示属性信息和数据信息,实现了对数值模式产品数据的自动解读说明,支持主要的格式转换,并提供数据分析(表2)。
表2 功能设计
(1)命令行工具。mrc为程序开启指令,包含两个子命令:convert和info,其中convert是格式转换命令,包含两个选项-ft和-vn,-ft表示转化文件类型,-vn表示变量名称;info是打印属性信息命令,包含-sh选项,表示展示文件名称。如表3所示METPAD命令行指令。
表3 命令行设计
(2)桌面交互程序。桌面交互程序提供用户交互式数据解读、格式转换和数据分析功能,目前已支持NetCDF,HDF,MICAPS,GRIB1,GRIB2等多类模式数据的解读和格式转换,支持雷达基数据的绘图分析。①集成实现了多类气象数据文件的解码算法组件,支持用户一键式的文件读取。通过Python语言调用各类库的方式封装形成了多类气象数据格式的解码算法组件,支持第三方调用,已支持的格式包括NetCDF,HDF,MICAPS,GRIB1,GRIB2。②集成实现了多类气象数据文件的编码算法组件,支持多套气象数据格式间的相互转换。通过Python语言调用各类库的方式封装形成了多类气象数据格式的编码算法组件,支持第三方调用,已支持的格式包括NetCDF,HDF,MICAPS,GRIB1,GRIB2。
已支持气象数据格式包括:NetCDF、GRIB1、GRIB2、HDF、MICAPS第4类、BUFR和雷达基数据。支持显示文件的基本信息,变量信息,维度信息等,数据内容以表格形式显示数据。BUFR数据显示解析的BUFR数据,雷达基数据显示雷达基数据绘图。数据内容页面包括切换预报时长、切换层次、分析、格式化、导出数据功能。
已支持格式转换的气象数据格式包括:NetCDF、GRIB1、GRIB2、HDF、MICAPS4和GrADS,格式转换功能如表4所示。
表4 数据格式转换功能
METPAD基于Python开发,Windows客户端界面框架选用PyQT(Python GUI应用程序的工具包)实现,数据处理算法引用三方库实现包括NetCDF4、pygrib(ECMWF ecCodes C库的Python接口)、Spring Python[19](编程框架)、pythonnet(.NET动态库调用接口)、pyinstaller(Python打包器)、click(Python 命令行工具开发包)等。Spring Python编程框架实现代码的松耦合,支持通过依赖注入和面向接口实现松耦合,支持声明的方式将服务模块化并应用到相应组件,使组件具有高内聚性,支持通过模板封装来消除大量重复,提升扩展性,减少业务相关性导致的软件稳定性问题。采用IronPython[20](.NET框架Python编程语言)实现Python调用动态库完成GRIB解码算法。技术架构如图2所示。
图2 技术架构图
METPAD集成了NetCDF4、pyMICAPS(MICAPS数据读取及可视化库)、MeteoInfo、pyCINRAD(雷达数据读取及可视化库)等三方函数库对气象各类格式进行解析,获取相应的数据源进行信息的展示和读写,具体使用的三方函数库如表5所示。
表5 第三方函数库调用情况
基于Python开发了各类数据的解读类和格式转换类,通过算法工厂集成,通过数据类型判断调用不同的类实现数据的解读或格式转换。如图3所示算法架构。
图3 算法实现架构
如图4所示为该工具的数据处理流程,桌面应用程序启动后,点击菜单打开文件,选择需要读取的文件,支持批量读取,系统调用数据解码算法,将数据解析并展示属性信息和数据信息。点击格式转换菜单,选择互相转换的数据类型,选择需要转换的数据文件,支持批量转换,调用数据转换算法,将转换后的数据保存到指定路径。
图4 数据处理流程
命令行工具输入命令启动程序,输入数据解析命令和数据文件路径,系统调用数据解码算法,将数据解析并展示属性信息和数据信息。用户输入格式转换命令,输入转换类型和需要转换的文件,调用数据转换算法,将转换后的数据保存到指定路径。
该工具桌面端已在北京高性能计算机应用中心网站(图5)发布,Linux客户端已在数值预报模式中试支撑环境中部署使用。
图5 METPAD工具获取方式
METPAD针对GRIB、NetCDF、HDF、MICAPS、BUFR、GrADS、雷达基数据等主要气象数据提供数据的解读、基础分析,以及格式转换功能,基于命令行的使用通过设置程序路径后即可加载使用。
利用METPAD在Linux平台对数据进行解读和格式转换。如图6所示,基于命令行对GRIB1格式的中国全球大气再分析数据进行读取和HDF格式转换,支持用户便捷地查看数据维度、变量和属性等信息,并通过命令行进行数据格式转换。
图6 中国全球大气再分析数据(2021年11月15日06:00)命令行读取及格式转换示例
METPAD桌面程序用户界面包括菜单栏、左侧快捷键、左侧文件及属性区和右侧数据展示操作区。图7所示示例为用户打开FY-4A干涉式大气垂直探测仪GIIRS数据后所列出的数据属性和内容,支持用户便捷地查看HDF格式数据,并支持用户进行内容检索、数据分析。通过菜单栏或左侧快捷键,实现数据格式转换和保存。
图7 2019年12月26日FY-4A GIIRS数据(HDF格式)解读示例
METPAD桌面程序支持雷达基数据的读取和绘图展示,打开雷达基数据后,在右侧数据展示操作区提供参数和图形展示,如图8所示示例为2017年7月9日21:26安庆站雷达基数据。
图8 2017年7月9日安庆站雷达基数据展示示例
METPAD的格式转换功能如图9示例,将2019年12月26日FY-4A GIIRS数据由HDF格式转换为NetCDF格式,能够支持多种常用气象数据的格式转换。
图9 2019年12月26日FY-4A GIIRS数据格式转换(HDF转NetCDF)示例
相对于MeteoInfo、Panoply、CodesUI等数据可视化工具,METPAD特点是提供对气象数据的解读和基础计算分析界面。相较于ecCodes、WGRIB等解码工具,METPAD增加了界面应用,支持解读的数据种类更丰富,并支持数据的格式转换。相较于CDO、NCO等数据处理分析工具,METPAD在数据计算能力方面存在不足,但支持种类更丰富,支持格式转换。METPAD实现了对我国MICAPS4数据与其他数据的格式转换支持和雷达基数据的可视化展示,如表6所示。
表6 METPAD与同类型软件功能特性比较
METPAD提供了一个通用的气象数据解析和格式转换工具,提供命令行和交互使用的方式,应用环境友好便捷,具备较强的格式转换功能,为气象数据的解读和分析提供了一种新的方式,其轻量级灵活性的特点,使得数据格式的转换处理更加简便。
目前该工具尚未支持数据的并行处理,在数据处理分析能力方面也需进一步完善。随着观测技术水平的提升和数据计算能力的提升,数据的规模、数据处理所需的计算能力都将大幅提升,如何高效地支持高分辨率气象数据的分析和格式转换,以及在数据处理过程中应用更强的计算能力,未来可在两方面进一步发展完善:①在数据分析和格式转换中探索并行实现机制,以及扩展对异构计算环境的支持,进一步提升软件性能和数据处理能力;②完善数据处理分析能力,增加数据的提取合并、统计分析、插值、变换、运算等功能的支持。