海洋多源异构数据转换系统的设计与实现
2014-12-23马伟霞田丰林纪鹏波宋丽丽
马伟霞,田丰林+,纪鹏波,宋丽丽,韩 勇,陈 戈
(1.中国海洋大学 信息科学与工程学院,山东 青岛266100;2.国家海洋信息中心国家海洋局数字海洋科学技术重点实验室,天津300171)
0 引 言
信息获取手段近年来不断增加,如海洋监测仪器,海洋卫星遥感,全球Argo(Array for real-time geostrophic oceanography)浮标计划、数值模式计算[1]等。这些手段获取的数据一方面丰富了海洋数据信息,为海洋研究提供了非常有利的基础条件,另一方面也带来了海洋数据格式的多种类问题[2],因此如何读取这些数据,是海洋科研人员需要解决的首要问题之一。针对这一问题,有人提出利用XML技术构建一个多源异构数据集成系统[3,4],该系统能够实现不同数据格式的集成,并有利于数据共享,但用户只能访问该系统中的数据,仍然无法处理自己的数据格式。针对上述问题以及现有集成系统的不足,本文提出开发一个海洋多源异构数据转换系统,该系统可单独作为一个数据转换软件进行使用,也可以作为一个功能模块嵌入到其它平台中。对于项目研发人员而言,这样可以减少开发的工作量,缩短开发周期;对于用户或数据研究人员来说,则方便其对数据进行后续处理。
1 数据格式简介
海洋数据存储格式种类较多,本文中主要处理以下几种:
(1)文本文件:文本文件由于其结构比较简单,容易阅读,因此被广泛地用于存储数据信息,也经常被不同单位用做数据交换。文本文件是一种基于字符集编码的文件,它有4 种编码方式,即ASCII编码、Unicode编码、Unicode big endian编码和UTF-8编码,而前2种比较常用。
(2)二进制文件:二进制文件存储利用率较高,但其是一种基于值编码的文件,多少个比特代表一个值,完全由数据保存者决定,因此存储比较灵活,处理起来有一定的困难。
(3)NetCDF文件:网络通用数据格式 (network common data form,NetCDF)是由美国大学大气研究协会(university corporation for atmospheric research,UCAR)的Unidata项目科学家针对科学数据的特点开发的一种面向数组型并适于网络共享的数据的描述和编码标准,是海洋数据常见存储格式。其文件结构主要由4部分组成:Dimensions即多维资料的结构,如经度、纬度、时间、深度等;Variables指各种变量,像温度、海流等;Attributes是一些辅助记忆的说明,如变量的单位、无效值等;Data则是主要数据资料部分。
(4)GrADS格式:GrADS是1种数据处理和显示软件系统,目前在气象界得到了广泛使用,许多气象工作者都习惯性把开发出来的各种产品保存为GRADS 格式。GrADS软件系统在进行数据处理时,所有数据在GrADS中均被视为纬度、经度、层次和时间的4 维场,而数据可以是格点资料,也可以是站点资料;数据格式可以是二进制,也可以是GRIB码。
(5)遥感影像文件:在遥感中遥感影像文件主要指航空像片和卫星像片。用计算机处理的遥感图像必须是数字图像。遥感影像中一般包括的信息有:坐标系统、坐标、分辨率、时间、波段信息等。
(6)HDF文件:HDF (hierarchical data format)是可以存储不同类型的图像和数码数据的分层数据格式,并且可以在不同类型的机器上传输,由美国国家高级计算应用中 (national center for supercomputing applications,NCSA)为了满足各领域研究需求而研制的一种能高效存储和分发数据的新型数据格式。
(7)Mat文件:Mat文件是MATLAB使用的一种特有的二进制数据文件。在Mat文件中不仅保存了各变量数据信息,还保存了变量名及其数据类型等。
2 数据转换系统
针对以上数据格式,尽管它们的存储机理各自不同,但有些数据格式可以通过相同的第三方库函数进行读取,因此可以将其放在一起进行处理。本系统在进行数据处理时,将以上数据格式划分为4大类来进行解读,分别为:文本文件类,主要包括文本格式文件;二进制文件类,主要包括二进制格式文件;GDAL 文件类,主要包括NetCDF 格式文件、GrADS格式文件、HDF 格式 (包括HDF4 和HDF5 格式)文件、遥感影像文件;MATLAB 文件类,主要包括Mat格式文件。而整个数据格式转换流程如图1所示。
图1 数据格式转换流程
2.1 配置文件设计
本系统中配置文件分为2部分:一部分为总配置文件,其作用是告诉系统接下来要分析什么类型数据;另一部分为对应4类文件的子配置文件,子配置文件主要完成对各个文件类的说明。下面以GDAL 文件类为例来详细介绍配置文件具体包括的内容:
总配置文件内容如下:
文件类型:2 (在本系统中默认:数字 “0”代表文本文件类,数字 “1”代表二进制文件类,数字 “2”代表GDAL文件类,数字 “3”代表MATLAB文件类);
子 (GDAL文件类)配置文件内容如下:
文件路径:即待读文件所在路径 (可选择读取单个文件或某文件夹下的所有文件);
深度文件:即与待读文件对应的深度文件,若存在,则写深度文件名,否则写 “0”;
时间变量名:即待读文件中时间集的名字;
时间范围:即数据读取者可在待读文件的时间范围内,自由选择读取的时间范围;
深度变量名:即待读文件中深度集的名字;
深度范围:即数据读取者可在待读文件的深度范围内,自由选择读取的深度范围;
纬度变量名:即待读文件中纬度集的名字;
纬度范围:即数据读取者可在待读文件的纬度范围内,自由选择读取的纬度范围;
经度变量名:即待读文件中经度集的名字;
经度范围:即数据读取者可在待读文件的经度范围内,自由选择读取的经度范围;
要素名:即待读文件中待读变量集的名字 (可多写,中间用 “,”隔开);
比例因子:即待读变量集的比例尺因子;
无效值:即待读变量集中的无效值数据;
单位:即待读变量集的单位。
2.2 数据解读
数据解读是本系统中主要研究内容。该部分主要是通过C++编程语言及相应的第三方开源库来完成的:MATLAB文件类通过MATLAB 读取[5]接口来实现,GDAL 文件类中NetCDF、HDF、遥感影像等文件格式都可以用GDAL进行读取[6],但是对于NetCDF、HDF,有时文件中的某些变量不是子数据集,此时这些变量就无法用GDAL来读取获得,因此需要分别用其相应的读取库进行读取[7,8],对于GrADS格式文件,可以利用GrADS软件中的lats4d.gs将其转化为NetCDF格式[9],然后进行处理。
本系统4类文件的解译过程虽然不一样,但是处理流程相似:首先读取配置中信息,并保存在一个事先定义好的结构体File_Param 中,其次根据File_Param 中的相应信息来完成数据的读取。下面仍以GDAL 文件类为例,该类文件的数据读取过程如图2所示。
图2 GDAL文件类的数据读取流程
2.3 数据再存储
2.3.1 数据存储结构
针对海洋数据多维度、多变量的特点,本系统设计了统一的数据存储结构——vvo数据存储结构。该存储结构中包含LatList,LonList,DepList,AttributeDataList 和TimeList这5组数据。前4 个List为基类vvoIGeoSection类型的智能指针,具体使用中必须依据其数据类型实例化其子类,各个子类对应不同的数据类型,如int、float、string等。每个子类中包含若干变量,如无效值、分辨率、最大值、最小值等,还有一个获取数据的接口getdata(),用于在类的外部给类内的变量赋值。如LatList中即可包括纬度的无效值、分辨率、最大值、最小值等信息,其他List数据类似,这样对于目前的海洋数据信息,可以确保没有丢失地保存在该数据存储结构中。此外,Attribute-DataList设计为vvoGeoFloat*类型vector容器,对于维度相同的变量,可以全部保存在数据存储结构中,这样在一定程度上减小了数据冗余。数据存储结构类图如图3所示。
图3 数据存储结构类图
2.3.2 数据保存
对于GDAL文件类与MATLAB 文件类,其数据的维度与维度、维度与要素、要素与要素之间的存储是相对分离的,即这2类文件的数据格式较为结构化,因此在对其读取各维度、要素的同时,即可将读取的数据保存在vvo数据存储结构对应的数组中。而对于文本文件类与二进制文件类,其数据格式是非结构化的,因此在将读取出来的数据进行保存时,就会比前2类复杂。由于文本文件类与二进制文件类的数据保存过程相似,因此本文中将简单介绍文本文件类数据的保存过程:首先逐文件读取数据,判断每个数据所属种类,并将其保存在相应的字符串vector容器中,待一个文件按照要求读取完毕,将上述字符串vector容器存入dataArraryList_vec容器中,并将dataArraryList_vec存入fileList_vec容器中,之后清空字符串vector容器与dataArraryList_vec容器,以便存储下一个文件中的数据。当所有文件处理完成后,将fileList_vec中的所有相同类的字符串容器进行合并,并将合并后每一类中的数据存入数据存储结构与之对应的数组中。具体保存过程如图4所示。
3 系统应用实例
数据转换系统可作为一款软件单独使用,也可被封装成一个lib——DataTranslate.lib,作为一个功能模块嵌入到其他程序中。下面以i4Ocean平台——由中国海洋大学海洋信息技术实验室自主研发的,集海洋数据可视化与海洋现象仿真为一体的平台,作为该数据转换系统的应用平台,以直接体绘制技术中的Splatting 算法[10,11]作为可视化手段,来介绍一下该系统的具体使用方法。
(1)数据转换lib的添加
1)在i4Ocean平台的应用程序中添加数据转换的全部头文件,并链入如下lib:DataTranslate.lib、gdal_i.lib、hd426m.lib、hdf5dll.lib、 hm426m.lib、libmat.lib、libmx.lib、netcdf.lib,同时在平台对应的exe程序所在的文件夹内放入如下dll:gdal110.dll、hd426m.dll、hdf5_hldll.dll、hdf5dll.dll、hm426m.dll、netcdf.dll;
2)在平台的MainFrm.cpp 文件中添加数据转换头文件:vvoReadConfigFile.h,并在窗口中添加1 个 “数据转换”的菜单,同时在该菜单函数中添加如下代码:
ReadConfigFile gReadConfig;
gReadConfig.LoadConfigFile();。
(2)数据转换的操作方法
1)根据将要处理的数据文件类型——本文中用的为NetCDF文件格式,数据来源为南海某一天的海风数据集,修改与其对应的配置文件;
2)运行平台程序,点击 “数据转换”菜单,即可将原数据格式转换为vvo数据格式,并在左侧的结点树视图中显示该数据结点;
3)点击该数据结点,选择可视化方法,即可在中间的视图窗口中看到该数据的可视化效果图,并在右侧的属性窗口中显示该数据的元数据信息,如图5 (a)所示。
图4 文本文件类保存流程
图5 数据转换应用实例
此外,在该平台上,利用数据转换系统还分别转换了Mat文件格式——全球Argo浮标数据的再分析数据,二进制文件格式——海洋遥感卫星获取的云图数据,对应的效果图,分别为图5 (b)与图5 (c)。
4 结束语
本文在充分了解各种海洋环境数据格式及其特点的基础上,通过分析其各自的存储机制,并在大量调研各数据格式的读取方式的情况下,从常用的海洋数据格式出发,通过设计相应的配置文件与统一的海洋数据存储结构,来实现海洋环境多源异构数据的解译与保存。该系统在完成数据格式转换的同时,具有如下几个特点:①支持数据格式种类较多:该系统可以实现7种数据格式的读取;②操作方便,容易掌握:用户只需要通过修改相应的配置文件,就可完成海洋数据文件格式的转换;③较强的实用性:由于该系统从具体的项目需求出发,一方面需要满足客户的要求,另一方面必须保证由其转换的数据格式能够方便数据的后续操作,如对数据进行分析、可视化等。
[1]ZHENG Peinan,SONG Jun,ZHANG Fangran,et al.Common instruction of some ogcm [J].Marine Forecasts,2008,25 (4):108-120(in Chinese).[郑沛楠,宋军,张芳苒,等.常用海洋数值模式简介[J].海洋预报,2008,25 (4):108-120.]
[2]CHEN Ge,LI Wenqing,KONG Qianqian,et al.Recent progress of marine geographic information system in China:A review for 2006-2010 [J].Journal of Ocean University of China,2012,11 (1):18-24.
[3]HUANG Dongmei,ZHANG Chi,DU Jipeng,et al.Integration of massive multi-source heterogeneous space-time data in digital sea [J].Marine Environmental Science,2012,31(1):111-113 (in Chinese).[黄冬梅,张弛,杜继鹏,等.数字海洋中海量多源异构空间数据集成研究 [J].海洋环境科学,2012,31 (1):111-113.]
[4]GU Tianzhu,SHEN Jie,CHEN Xiaohong,et al.Association for science and technology forum research on heterogeneous data integration based on XML [J].Application Research of Computers,2007,24 (4):94-96 (in Chinese).[顾天竺,沈洁,陈晓红,等.基于XML的异构数据集成模式的研究 [J].计算机应用研究,2007,24 (4):94-96.]
[5]WANG Shixiang.Proficient in MATLAB interface and programming [M].Beijing:Publishing House of Electronics Industry,2007 (in Chinese).[王世香.精通MATLAB接口与编程 [M].北京:电子工业出版社,2007.]
[6]WANG Jicheng,JIANG Diwei,XIE Zhijian.Research of raster data extraction from HDF file format based on GDAL [J].Association for Science and Technology Forum,2012,27 (8):62-63 (in Chinese).[王继承,蒋狄微,谢智剑.基于GDAL的HDF文件格式栅格数据提取的研究 [J].科协论坛,2012,27 (8):62-63.]
[7]ZHANG Lin,GAO Yuchun,YANG Jinhong,et al.NetCDF data uploading and product display of phased-arrary weather radar based on VC++platform [J].Meteorological Science and Technology,2010,38 (8):230-234 (in Chinese) [张林,高玉春,杨金红,等.基于VC++平台的相控阵天气雷达NetCDF数据读取与产品显示[J].气象科技,2010,38 (8):230-234.]
[8]Sandeep Koranne.Handbook of open source tools[M].Germany:Springer,2010.
[9]YANG Zhaoli,WAN Qilin.Example analysis how to implement NetCDF format conversion with GrADS [J].Guangdong Meteorology,2008,30 (5):47-49 (in Chinese) [杨兆礼,万奇林.实例分析如何用GrADS实现NetCDF格式转换 [J].广东气象,2008,30 (5):47-49.]
[10]Hyeon-Joong Kim,Cengiz Oztireli A,Markus Gross,et al.Adaptive surface splatting for facial rendering [J].Computer Animation and Virtual Worlds,2012,23 (3-4):363-373.
[11]CHEN Wei,XIA Jiazhi,ZHANG Long,et al.A uniform hardware-accelerated adaptive EWA Splatting algorithm [J].Chinese Journal of Computers,2009,32 (8):1571-1581 (in Chinese).[陈为,夏佳志,张龙,等.一种统一的硬件加速自适应EWA Splatting 算法 [J].计算机学报,2009,32(8):1571-1581.]