馬偉霞,田豐林+,紀(jì)鵬波,宋麗麗,韓 勇,陳 戈
(1.中國海洋大學(xué) 信息科學(xué)與工程學(xué)院,山東 青島266100;2.國家海洋信息中心國家海洋局?jǐn)?shù)字海洋科學(xué)技術(shù)重點(diǎn)實(shí)驗(yàn)室,天津300171)
信息獲取手段近年來不斷增加,如海洋監(jiān)測(cè)儀器,海洋衛(wèi)星遙感,全球Argo(Array for real-time geostrophic oceanography)浮標(biāo)計(jì)劃、數(shù)值模式計(jì)算[1]等。這些手段獲取的數(shù)據(jù)一方面豐富了海洋數(shù)據(jù)信息,為海洋研究提供了非常有利的基礎(chǔ)條件,另一方面也帶來了海洋數(shù)據(jù)格式的多種類問題[2],因此如何讀取這些數(shù)據(jù),是海洋科研人員需要解決的首要問題之一。針對(duì)這一問題,有人提出利用XML技術(shù)構(gòu)建一個(gè)多源異構(gòu)數(shù)據(jù)集成系統(tǒng)[3,4],該系統(tǒng)能夠?qū)崿F(xiàn)不同數(shù)據(jù)格式的集成,并有利于數(shù)據(jù)共享,但用戶只能訪問該系統(tǒng)中的數(shù)據(jù),仍然無法處理自己的數(shù)據(jù)格式。針對(duì)上述問題以及現(xiàn)有集成系統(tǒng)的不足,本文提出開發(fā)一個(gè)海洋多源異構(gòu)數(shù)據(jù)轉(zhuǎn)換系統(tǒng),該系統(tǒng)可單獨(dú)作為一個(gè)數(shù)據(jù)轉(zhuǎn)換軟件進(jìn)行使用,也可以作為一個(gè)功能模塊嵌入到其它平臺(tái)中。對(duì)于項(xiàng)目研發(fā)人員而言,這樣可以減少開發(fā)的工作量,縮短開發(fā)周期;對(duì)于用戶或數(shù)據(jù)研究人員來說,則方便其對(duì)數(shù)據(jù)進(jìn)行后續(xù)處理。
海洋數(shù)據(jù)存儲(chǔ)格式種類較多,本文中主要處理以下幾種:
(1)文本文件:文本文件由于其結(jié)構(gòu)比較簡單,容易閱讀,因此被廣泛地用于存儲(chǔ)數(shù)據(jù)信息,也經(jīng)常被不同單位用做數(shù)據(jù)交換。文本文件是一種基于字符集編碼的文件,它有4 種編碼方式,即ASCII編碼、Unicode編碼、Unicode big endian編碼和UTF-8編碼,而前2種比較常用。
(2)二進(jìn)制文件:二進(jìn)制文件存儲(chǔ)利用率較高,但其是一種基于值編碼的文件,多少個(gè)比特代表一個(gè)值,完全由數(shù)據(jù)保存者決定,因此存儲(chǔ)比較靈活,處理起來有一定的困難。
(3)NetCDF文件:網(wǎng)絡(luò)通用數(shù)據(jù)格式 (network common data form,NetCDF)是由美國大學(xué)大氣研究協(xié)會(huì)(university corporation for atmospheric research,UCAR)的Unidata項(xiàng)目科學(xué)家針對(duì)科學(xué)數(shù)據(jù)的特點(diǎn)開發(fā)的一種面向數(shù)組型并適于網(wǎng)絡(luò)共享的數(shù)據(jù)的描述和編碼標(biāo)準(zhǔn),是海洋數(shù)據(jù)常見存儲(chǔ)格式。其文件結(jié)構(gòu)主要由4部分組成:Dimensions即多維資料的結(jié)構(gòu),如經(jīng)度、緯度、時(shí)間、深度等;Variables指各種變量,像溫度、海流等;Attributes是一些輔助記憶的說明,如變量的單位、無效值等;Data則是主要數(shù)據(jù)資料部分。
(4)GrADS格式:GrADS是1種數(shù)據(jù)處理和顯示軟件系統(tǒng),目前在氣象界得到了廣泛使用,許多氣象工作者都習(xí)慣性把開發(fā)出來的各種產(chǎn)品保存為GRADS 格式。GrADS軟件系統(tǒng)在進(jìn)行數(shù)據(jù)處理時(shí),所有數(shù)據(jù)在GrADS中均被視為緯度、經(jīng)度、層次和時(shí)間的4 維場(chǎng),而數(shù)據(jù)可以是格點(diǎn)資料,也可以是站點(diǎn)資料;數(shù)據(jù)格式可以是二進(jìn)制,也可以是GRIB碼。
(5)遙感影像文件:在遙感中遙感影像文件主要指航空像片和衛(wèi)星像片。用計(jì)算機(jī)處理的遙感圖像必須是數(shù)字圖像。遙感影像中一般包括的信息有:坐標(biāo)系統(tǒng)、坐標(biāo)、分辨率、時(shí)間、波段信息等。
(6)HDF文件:HDF (hierarchical data format)是可以存儲(chǔ)不同類型的圖像和數(shù)碼數(shù)據(jù)的分層數(shù)據(jù)格式,并且可以在不同類型的機(jī)器上傳輸,由美國國家高級(jí)計(jì)算應(yīng)用中 (national center for supercomputing applications,NCSA)為了滿足各領(lǐng)域研究需求而研制的一種能高效存儲(chǔ)和分發(fā)數(shù)據(jù)的新型數(shù)據(jù)格式。
(7)Mat文件:Mat文件是MATLAB使用的一種特有的二進(jìn)制數(shù)據(jù)文件。在Mat文件中不僅保存了各變量數(shù)據(jù)信息,還保存了變量名及其數(shù)據(jù)類型等。
針對(duì)以上數(shù)據(jù)格式,盡管它們的存儲(chǔ)機(jī)理各自不同,但有些數(shù)據(jù)格式可以通過相同的第三方庫函數(shù)進(jìn)行讀取,因此可以將其放在一起進(jìn)行處理。本系統(tǒng)在進(jìn)行數(shù)據(jù)處理時(shí),將以上數(shù)據(jù)格式劃分為4大類來進(jìn)行解讀,分別為:文本文件類,主要包括文本格式文件;二進(jìn)制文件類,主要包括二進(jìn)制格式文件;GDAL 文件類,主要包括NetCDF 格式文件、GrADS格式文件、HDF 格式 (包括HDF4 和HDF5 格式)文件、遙感影像文件;MATLAB 文件類,主要包括Mat格式文件。而整個(gè)數(shù)據(jù)格式轉(zhuǎn)換流程如圖1所示。
圖1 數(shù)據(jù)格式轉(zhuǎn)換流程
本系統(tǒng)中配置文件分為2部分:一部分為總配置文件,其作用是告訴系統(tǒng)接下來要分析什么類型數(shù)據(jù);另一部分為對(duì)應(yīng)4類文件的子配置文件,子配置文件主要完成對(duì)各個(gè)文件類的說明。下面以GDAL 文件類為例來詳細(xì)介紹配置文件具體包括的內(nèi)容:
總配置文件內(nèi)容如下:
文件類型:2 (在本系統(tǒng)中默認(rèn):數(shù)字 “0”代表文本文件類,數(shù)字 “1”代表二進(jìn)制文件類,數(shù)字 “2”代表GDAL文件類,數(shù)字 “3”代表MATLAB文件類);
子 (GDAL文件類)配置文件內(nèi)容如下:
文件路徑:即待讀文件所在路徑 (可選擇讀取單個(gè)文件或某文件夾下的所有文件);
深度文件:即與待讀文件對(duì)應(yīng)的深度文件,若存在,則寫深度文件名,否則寫 “0”;
時(shí)間變量名:即待讀文件中時(shí)間集的名字;
時(shí)間范圍:即數(shù)據(jù)讀取者可在待讀文件的時(shí)間范圍內(nèi),自由選擇讀取的時(shí)間范圍;
深度變量名:即待讀文件中深度集的名字;
深度范圍:即數(shù)據(jù)讀取者可在待讀文件的深度范圍內(nèi),自由選擇讀取的深度范圍;
緯度變量名:即待讀文件中緯度集的名字;
緯度范圍:即數(shù)據(jù)讀取者可在待讀文件的緯度范圍內(nèi),自由選擇讀取的緯度范圍;
經(jīng)度變量名:即待讀文件中經(jīng)度集的名字;
經(jīng)度范圍:即數(shù)據(jù)讀取者可在待讀文件的經(jīng)度范圍內(nèi),自由選擇讀取的經(jīng)度范圍;
要素名:即待讀文件中待讀變量集的名字 (可多寫,中間用 “,”隔開);
比例因子:即待讀變量集的比例尺因子;
無效值:即待讀變量集中的無效值數(shù)據(jù);
單位:即待讀變量集的單位。
數(shù)據(jù)解讀是本系統(tǒng)中主要研究內(nèi)容。該部分主要是通過C++編程語言及相應(yīng)的第三方開源庫來完成的:MATLAB文件類通過MATLAB 讀?。?]接口來實(shí)現(xiàn),GDAL 文件類中NetCDF、HDF、遙感影像等文件格式都可以用GDAL進(jìn)行讀?。?],但是對(duì)于NetCDF、HDF,有時(shí)文件中的某些變量不是子數(shù)據(jù)集,此時(shí)這些變量就無法用GDAL來讀取獲得,因此需要分別用其相應(yīng)的讀取庫進(jìn)行讀取[7,8],對(duì)于GrADS格式文件,可以利用GrADS軟件中的lats4d.gs將其轉(zhuǎn)化為NetCDF格式[9],然后進(jìn)行處理。
本系統(tǒng)4類文件的解譯過程雖然不一樣,但是處理流程相似:首先讀取配置中信息,并保存在一個(gè)事先定義好的結(jié)構(gòu)體File_Param 中,其次根據(jù)File_Param 中的相應(yīng)信息來完成數(shù)據(jù)的讀取。下面仍以GDAL 文件類為例,該類文件的數(shù)據(jù)讀取過程如圖2所示。
圖2 GDAL文件類的數(shù)據(jù)讀取流程
2.3.1 數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)
針對(duì)海洋數(shù)據(jù)多維度、多變量的特點(diǎn),本系統(tǒng)設(shè)計(jì)了統(tǒng)一的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)——vvo數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)。該存儲(chǔ)結(jié)構(gòu)中包含LatList,LonList,DepList,AttributeDataList 和TimeList這5組數(shù)據(jù)。前4 個(gè)List為基類vvoIGeoSection類型的智能指針,具體使用中必須依據(jù)其數(shù)據(jù)類型實(shí)例化其子類,各個(gè)子類對(duì)應(yīng)不同的數(shù)據(jù)類型,如int、float、string等。每個(gè)子類中包含若干變量,如無效值、分辨率、最大值、最小值等,還有一個(gè)獲取數(shù)據(jù)的接口getdata(),用于在類的外部給類內(nèi)的變量賦值。如LatList中即可包括緯度的無效值、分辨率、最大值、最小值等信息,其他List數(shù)據(jù)類似,這樣對(duì)于目前的海洋數(shù)據(jù)信息,可以確保沒有丟失地保存在該數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)中。此外,Attribute-DataList設(shè)計(jì)為vvoGeoFloat*類型vector容器,對(duì)于維度相同的變量,可以全部保存在數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)中,這樣在一定程度上減小了數(shù)據(jù)冗余。數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)類圖如圖3所示。
圖3 數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)類圖
2.3.2 數(shù)據(jù)保存
對(duì)于GDAL文件類與MATLAB 文件類,其數(shù)據(jù)的維度與維度、維度與要素、要素與要素之間的存儲(chǔ)是相對(duì)分離的,即這2類文件的數(shù)據(jù)格式較為結(jié)構(gòu)化,因此在對(duì)其讀取各維度、要素的同時(shí),即可將讀取的數(shù)據(jù)保存在vvo數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)對(duì)應(yīng)的數(shù)組中。而對(duì)于文本文件類與二進(jìn)制文件類,其數(shù)據(jù)格式是非結(jié)構(gòu)化的,因此在將讀取出來的數(shù)據(jù)進(jìn)行保存時(shí),就會(huì)比前2類復(fù)雜。由于文本文件類與二進(jìn)制文件類的數(shù)據(jù)保存過程相似,因此本文中將簡單介紹文本文件類數(shù)據(jù)的保存過程:首先逐文件讀取數(shù)據(jù),判斷每個(gè)數(shù)據(jù)所屬種類,并將其保存在相應(yīng)的字符串vector容器中,待一個(gè)文件按照要求讀取完畢,將上述字符串vector容器存入dataArraryList_vec容器中,并將dataArraryList_vec存入fileList_vec容器中,之后清空字符串vector容器與dataArraryList_vec容器,以便存儲(chǔ)下一個(gè)文件中的數(shù)據(jù)。當(dāng)所有文件處理完成后,將fileList_vec中的所有相同類的字符串容器進(jìn)行合并,并將合并后每一類中的數(shù)據(jù)存入數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)與之對(duì)應(yīng)的數(shù)組中。具體保存過程如圖4所示。
數(shù)據(jù)轉(zhuǎn)換系統(tǒng)可作為一款軟件單獨(dú)使用,也可被封裝成一個(gè)lib——DataTranslate.lib,作為一個(gè)功能模塊嵌入到其他程序中。下面以i4Ocean平臺(tái)——由中國海洋大學(xué)海洋信息技術(shù)實(shí)驗(yàn)室自主研發(fā)的,集海洋數(shù)據(jù)可視化與海洋現(xiàn)象仿真為一體的平臺(tái),作為該數(shù)據(jù)轉(zhuǎn)換系統(tǒng)的應(yīng)用平臺(tái),以直接體繪制技術(shù)中的Splatting 算法[10,11]作為可視化手段,來介紹一下該系統(tǒng)的具體使用方法。
(1)數(shù)據(jù)轉(zhuǎn)換lib的添加
1)在i4Ocean平臺(tái)的應(yīng)用程序中添加數(shù)據(jù)轉(zhuǎn)換的全部頭文件,并鏈入如下lib:DataTranslate.lib、gdal_i.lib、hd426m.lib、hdf5dll.lib、 hm426m.lib、libmat.lib、libmx.lib、netcdf.lib,同時(shí)在平臺(tái)對(duì)應(yīng)的exe程序所在的文件夾內(nèi)放入如下dll:gdal110.dll、hd426m.dll、hdf5_h(yuǎn)ldll.dll、hdf5dll.dll、hm426m.dll、netcdf.dll;
2)在平臺(tái)的MainFrm.cpp 文件中添加數(shù)據(jù)轉(zhuǎn)換頭文件:vvoReadConfigFile.h,并在窗口中添加1 個(gè) “數(shù)據(jù)轉(zhuǎn)換”的菜單,同時(shí)在該菜單函數(shù)中添加如下代碼:
ReadConfigFile gReadConfig;
gReadConfig.LoadConfigFile();。
(2)數(shù)據(jù)轉(zhuǎn)換的操作方法
1)根據(jù)將要處理的數(shù)據(jù)文件類型——本文中用的為NetCDF文件格式,數(shù)據(jù)來源為南海某一天的海風(fēng)數(shù)據(jù)集,修改與其對(duì)應(yīng)的配置文件;
2)運(yùn)行平臺(tái)程序,點(diǎn)擊 “數(shù)據(jù)轉(zhuǎn)換”菜單,即可將原數(shù)據(jù)格式轉(zhuǎn)換為vvo數(shù)據(jù)格式,并在左側(cè)的結(jié)點(diǎn)樹視圖中顯示該數(shù)據(jù)結(jié)點(diǎn);
3)點(diǎn)擊該數(shù)據(jù)結(jié)點(diǎn),選擇可視化方法,即可在中間的視圖窗口中看到該數(shù)據(jù)的可視化效果圖,并在右側(cè)的屬性窗口中顯示該數(shù)據(jù)的元數(shù)據(jù)信息,如圖5 (a)所示。
圖4 文本文件類保存流程
圖5 數(shù)據(jù)轉(zhuǎn)換應(yīng)用實(shí)例
此外,在該平臺(tái)上,利用數(shù)據(jù)轉(zhuǎn)換系統(tǒng)還分別轉(zhuǎn)換了Mat文件格式——全球Argo浮標(biāo)數(shù)據(jù)的再分析數(shù)據(jù),二進(jìn)制文件格式——海洋遙感衛(wèi)星獲取的云圖數(shù)據(jù),對(duì)應(yīng)的效果圖,分別為圖5 (b)與圖5 (c)。
本文在充分了解各種海洋環(huán)境數(shù)據(jù)格式及其特點(diǎn)的基礎(chǔ)上,通過分析其各自的存儲(chǔ)機(jī)制,并在大量調(diào)研各數(shù)據(jù)格式的讀取方式的情況下,從常用的海洋數(shù)據(jù)格式出發(fā),通過設(shè)計(jì)相應(yīng)的配置文件與統(tǒng)一的海洋數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),來實(shí)現(xiàn)海洋環(huán)境多源異構(gòu)數(shù)據(jù)的解譯與保存。該系統(tǒng)在完成數(shù)據(jù)格式轉(zhuǎn)換的同時(shí),具有如下幾個(gè)特點(diǎn):①支持?jǐn)?shù)據(jù)格式種類較多:該系統(tǒng)可以實(shí)現(xiàn)7種數(shù)據(jù)格式的讀?。虎诓僮鞣奖?,容易掌握:用戶只需要通過修改相應(yīng)的配置文件,就可完成海洋數(shù)據(jù)文件格式的轉(zhuǎn)換;③較強(qiáng)的實(shí)用性:由于該系統(tǒng)從具體的項(xiàng)目需求出發(fā),一方面需要滿足客戶的要求,另一方面必須保證由其轉(zhuǎn)換的數(shù)據(jù)格式能夠方便數(shù)據(jù)的后續(xù)操作,如對(duì)數(shù)據(jù)進(jìn)行分析、可視化等。
[1]ZHENG Peinan,SONG Jun,ZHANG Fangran,et al.Common instruction of some ogcm [J].Marine Forecasts,2008,25 (4):108-120(in Chinese).[鄭沛楠,宋軍,張芳苒,等.常用海洋數(shù)值模式簡介[J].海洋預(yù)報(bào),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).[黃冬梅,張弛,杜繼鵬,等.數(shù)字海洋中海量多源異構(gòu)空間數(shù)據(jù)集成研究 [J].海洋環(huán)境科學(xué),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的異構(gòu)數(shù)據(jù)集成模式的研究 [J].計(jì)算機(jī)應(yīng)用研究,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].北京:電子工業(yè)出版社,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文件格式柵格數(shù)據(jù)提取的研究 [J].科協(xié)論壇,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++平臺(tái)的相控陣天氣雷達(dá)NetCDF數(shù)據(jù)讀取與產(chǎn)品顯示[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) [楊兆禮,萬奇林.實(shí)例分析如何用GrADS實(shí)現(xiàn)NetCDF格式轉(zhuǎn)換 [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).[陳為,夏佳志,張龍,等.一種統(tǒng)一的硬件加速自適應(yīng)EWA Splatting 算法 [J].計(jì)算機(jī)學(xué)報(bào),2009,32(8):1571-1581.]