吕梁,陈晴,滕舟
(浙江省气象信息网络中心,杭州,310017)
基于NetCDF的数值预报产品存储和应用
吕梁,陈晴,滕舟
(浙江省气象信息网络中心,杭州,310017)
对基于NetCDF的数值预报产品的存储和应用等方面的关键技术进行深入的研究,其中包括NetCDF的功能概况、数据结构、使用方法和特点分析,基于NetCDF的数值预报产品存储架构设计以及在此架构之上的数值预报产品应用模式分析等。提出一套可以支持各类数值预报产品规范存储,统一访问接口友好、高效输出的数值预报产品存储和应用技术。实验表明,该关键技术解决方案具有较好的实际操作性,能够支持大部分数值预报模式,对各类终端系统具有良好的兼容性。
NetCDF;数值预报;存储架构;应用模式;访问接口
随着气象信息化的不断推进,各类数值预报产品基本以文件库和关系型数据库的形式提供共享,但是由于产品内容丰富、格式复杂、存放规范不统一和调用规则不一致等原因导致目前还缺乏统一的产品访问接口。各类模式预报数据[1]在业务使用上,存在数据无法统一读取,访问方式复杂多样,抽取时间序列困难等一系列问题。
因此,研究如何建立一套规范化的数值预报产品存储和应用设计方案,就有其现实意义。本文基于大数据存储系统作为数据环境运行的硬件和软件平台,建立基于NetCDF文件格式的格点数据专用数据库,开发支持HTTP、SOAP协议和Socket技术的格点数据计算处理算法,采用标准化数据的输出格式和规范化接口的调用方法,提供一致的接口来访问不同的数值预报产品。能够快速地对预报数据按照地理区域进行单个时次数据的获取功能,能够对某一坐标点的单个气象要素进行24小时序列的快速获取和其他一些具体的数据访问接口功能。
根据这一思想,本文从NetCDF的功能概况、数据结构、使用方法和特点分析,基于NetCDF的数值预报产品存储架构设计以及在此架构之上的数值预报产品应用模式分析等多个角度进行深入研究。在此基础上,如何增加统一访问接口对数值预报产品的整体支持,就成为了本文需要重点解决的问题。
1.1NetCDF概况
NetCDF是网络通用数据格式(Network Common Data Form)的简称,主要特点是能够通过统一的数据结构快速高效地读取包括单点、时间序列等的网格类数据,以文件扩展名.nc结尾。
NetCDF存取的数据分布系统是一个基于多维的数据格式,如果需要获得某个单点数据时,不需要按照传统方法遍历所有前部节点,而是由NetCDF特定算法直接存取那一个数据[2]。因此,通过NetCDF不仅能够高效地管理、读取和更改海量的网格数据,而且能够大大降低模式产品计算所必须消耗的数据存取时间,已经成为了包括气象、水文、海洋和地理等科技领域的数据生成标准。
1.2NetCDF文件结构
NetCDF文件主要是Dimensions、Variables、Attributes、Data四个部分组成的[3]。NetCDF存储的数据可从数学角度理解为由多自变量共同决定的单值函数:
F(x,y,z,...)=value
公式中的多个自变量(x,y,z,…等)在NetCDF里称为维(Dimensions),例如维度可以是时间、纬度、经度等;公式中的单值函数值value在NetCDF里称为变量(Variables),例如海拔、降水等。另外,为了能够更准确地描述函数值与自变量各自的特性(单位、学名等),NetCDF还增加了称为属性(Attributes)的字段。最后称为Data的部分主要存储数据资料。
一个NetCDF文件的结构示例如下:
NetCDF name{
Dimensions:…//定义维数
Variables:…//定义变量
Attributes:…//属性
Data:…//数据
}
1.3坐标系变换
NetCDF维度的默认步进为1。然而在现实应用情况下,经常使用的是自定义的坐标系统,此时可以使用(Coordinate Varibles)坐标变量[4]。坐标变量是一个以特定维度为自变量的一维单值函数。举例如下:
NetCDF test_pres{
dimensions:
latitude=6;//纬度轴
longitude=12;//经度轴
variables:
float latitude(latitude);//坐标变量,具体纬度
float longitude(longitude);//坐标变量,具体纬度
float pressure(latitude,longitude);//气压值
data:
latitude=25,30,35,40,45,50;
longitude=-125,-120,-115,-110,-105,-100,-95,-90,-85,-80,-75,-70;
pressure=902,906,912,918,924,930,936,942,948,954,960,966,
……
905,911,917,923,929,935,941,947,953,959,965,973;
通过坐标变换的方式进行转换,结果为:
latitude=25,longitude=-125时,pressure=902;
latitude=50,longitude=-70时,pressure=973;
以此类推。
1.4NetCDF程序读写
Java的编程环境为Eclipse+jdk7,新建项目,将下载的NetCDF 4.3的jar包添加到项目的编译路径下,完成编译、运行后能够产生simple_xy.nc结果,代码如下:
public boolean writeToNetdf3(String datasetIn,String datasetOut,boolean isLargeFile)throws IOException{
NetCDFFile ncfileIn=ucar.nc2.dataset.NetCDFDataset. openFile(datasetIn,null);
System.out.println("Read from"+datasetIn+"write to" +datasetOut);
NetCDFFile ncfileOut=ucar.nc2.FileW riter.writeToFile(ncfileIn,datasetOut,false,-1,isLargeFile);
ncfileIn.close();
ncfileOut.close();
System.out.println("NetCDFFile successfully written="+ ncfileOut);
2.3NetCDF存储目录结构
对目前使用较频繁的数值预报产品数据进行分解处理,按照格点数据的一些属性进行了分类存储管理。建立基于NetCDF格式的数值预报数据库,按照一定目录规则结构和数据组织结构进行规整存储。NetCDF存储目录的组织形式为:
根目录/模式名称/年月日/气象要素NC文件
具体目录存储示例如图1。
根据各类模式提供的要素名称,如图2:
图1 存储目录结构
表1 要素定义
将NetCDF的文件名定义为:“要素”+“_”+“生成时间”+“预报时间”+“.nc”,如图2:
图2 文件名称
2.2NetCDF数据结构
NetCDF格式的格点数据的组织,按照每个气象要素建立整日的格点数据文件,包含每个起报时间制作或订正的各预报时效预报数据,NetCDF数据格式的定义如下:
(1)Dimensions维度段:设定气象要素为4个纬度数据(time,level,lat,lon),包括时间、层次、纬度和经度。
(2)Variables属性段:描述各类属性值,其中lon(lon)为经度方向格点数量;lat(lat)为维度方向格点数量;level(level)指定具体的高度层次值;time(time)指定具体的起报时间值;flag(flag用来表示某一起报时间的预报数据是否被写入;tstr(tstr)设定具体起报时间;ystr(ystr)用来设定该预报制作的年份。
(3)Data数据段:存储各属性定义的具体值。其中存储了整日每个起报时间制作的逐个预报时效的气温格点数据,覆盖全部预报时效。
具体的文件示例:
dimensions:
lon=116;lat=125;level=1;time=4;
variables:
float lon(lon);lon:units="degrees_east";
float lat(lat);lat:units="degrees_north";
float level(level);level:units="millibars";
float time(time);time:units="days since 2015-01-01 00:00:00";
float flag(time);float tstr(time);float ystr(time);
float t2mm001(time,level,lat,lon);
t2mm001:missing_value=-999999.0f;
float t2mm002(time,level,lat,lon);…………
data:
lon=116,116.05,116.1,……,124.9,124.95,125;
lat=25,25.05,20.1,……,32.9,32.95,33;
level=0;
time=0,0.25,0.5,0.75;
flag=1,_,1,_,1,_,……;
tstr=10100,_,10112,_,10200,_,……;
ystr=2014,_,2014,_,2014,_,……;
t2mm01=23.1,24.2,……
3.1数据源整体架构
目前,在业务支持环境里有以下三类数据源:
(1)格点数据库
对大部分数值预报进行解码工作,采用Grib1、Grib2格式进行统一存储管理。
(2)NetCDF格点数据库
本文按照CIMISS标准搭建NetCDF格点数据库,以支撑格点应用系统。
(3)其他格点数据:HDF4、HDF5、Micaps等。
3.2统一访问接口
在建立了基于NetCDF文件格式的统一的规范化格点数据库以后,开发并拓展基于CIMISS的格点数值预报统一数据访问接口,增加对自有模式产品和国外其他模式产品的支持,从而实现更加丰富的标准化数据输出和规范化接口的调用方法。利用统一的数据访问接口作为业务应用与数据库之间的中间层,实现软件架构的松耦合,对应用的扩展提供更好的基础。
统一数据访问接口支持HTTP、SOAP协议[5]和Socket技术的格点数据计算处理方法,提供精细化预报系统格点数据的读取、写入、更新和同步访问接口。各级用户通过发布的统一接口获取数据。总体架构如图3所示。
图3 总体架构
数据服务接口根据格点预报制作与订正过程中涉及到的具体数据访问接口,使用统一和标准化的调用方式和数据封装结果(返回结果调用方式、接口命名、参数命名)。能够按照具体业务应用场景提供格点数据中整个平面场写入、指定格点数据写入、裁剪、读取和插值的数据操作功能。同时,接口具备均衡负载策略,能够提供较高的响应和处理效率,流程的配和基于GUI格点的编辑,兼容大部分流行开发环境的调用。读取、写入接口分别被封装为Linux版本和Windows版本的动态库,方便精细化预报编辑工具的使用,同时采用Socket的数据传输方式,尽量避免多余的数据传输。
3.3数据管理
为了增强数值预报产品业务支撑的稳定性,需要对格点数据库进行日常的数据管理,包括定时预先生成空场格点预报数据、格点数据备份和历史格点数据的归档存储。对数值预报格点数据服务,进行日常的监控管理,包括定时监视数据服务状态、每次请求数据的日志记录、实时统计在线用户数量和数据同步进程的运行状态。对预报制作业务,进行日常告警监控,包括监视各时次预报制作的情况、数据上传情况、数据同步情况等。
以上各类业务的监视,运行监视均纳入到统一的监视平台,提供统一的值班监视页面由专人维护,包括系统状态监视、存储空间监视、进程监视、接口访问性能监视、预报制作、数据上传和同步等各个方面。
[1]周毅.数值天气预报基础[M].气象出版社,2003
[2]Ramamurthy M.NetCDFC/C++/Fortran Source Code and Documentation[EB/OL].http://www.unidata.ucar.edu/software/NetCDF/,2008
[3]Russ Rew,Glenn Davis,Steve Emmerson,Ha-rvey Davies.NetCDFFortran 90 Interface Guide[M].Boulder:Unidata Program Center,2005
[4]查石祥.NetCDF数据的编程式访问[J].气象科技,2004(增刊):40~43
[5]James Snell,Doug Tidwell,Pavel Kulchenko.SOAPWeb服务开发[M].中国电力出版社,2002
NetCDF;Numerical Forecast;Storage;App lication Mode;Access Interface
Storage and App lication of Num erical Forecast Products Based on NetCDF
LV Liang,CHEN Qing,TENG Zhou
(Zhejiang Meteorological Information and Network Center,Hangzhou 310017)
Makes a deep research on key technology of the storage and application of numerical forecast products based on NetCDF,including the overview of the functions,data structures,usingmethods and characteristics of NetCDF,the product storage architecture design and the application of numerical forecast products based onmode analysis.Proposes a set of technologies which can support a variety of standardized storage,the unified access interface can friendly and efficient output all kinds of numerical forecast products.Experimental results show that the solutions are practical,can supportmostof numerical forecastmodel and have a good compatibility to all kinds of terminal system.
1007-1423(2015)16-0047-05
10.3969/j.issn.1007-1423.2015.16.011
吕梁(1983-),男,浙江衢州人,工程师,硕士研究生,研究方向为信息网络和办公自动化
陈晴(1984-),女,浙江杭州人,工程师,本科,研究方向为信息网络和数据库
滕舟(1982-),男,浙江杭州人,工程师,本科,研究方向为信息网络和网络安全
2015-04-29
2015-05-21