999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

HDF4文件訪問中間件的設計與實現

2015-02-20 08:16:00沈夏炯韓道軍
計算機工程 2015年3期

沈夏炯,馬 瑞,韓道軍,周 兵,2

(1.河南大學a.計算機與信息工程學院;b.數據與知識工程研究所,河南開封475004;

2.圖像處理與模式識別研究所,河南開封475004)

HDF4文件訪問中間件的設計與實現

沈夏炯1a,1b,馬 瑞1a,韓道軍1a,1b,周 兵1a,2

(1.河南大學a.計算機與信息工程學院;b.數據與知識工程研究所,河南開封475004;

2.圖像處理與模式識別研究所,河南開封475004)

HDF4文件常用于中分辨率成像光譜儀(MODIS)產品數據的存儲,可存儲多種類型的數據,但是文件數據結構復雜。目前,HDF GROUP開發的操作HDF4文件的函數庫只可用于Fortran語言和C語言,其他編程語言缺少比較系統讀寫HDF4文件的方法。ArcGIS雖支持大部分柵格數據格式,但不支持多數據集層次式存儲的HDF數據格式。為此,設計基于C#語言操作的HDF4文件中間件,解決ArcGIS無法創建多數據集HDF4文件等問題,并給出中間件的核心思想和具體應用實例。將該中間件應用于環保部生態環境遙感產品生產分系統項目中,結果表明,在處理MODIS產品數據時,解決了C#語言無法創建多數據集HDF4文件等問題,驗證了該中間件的實用性。

分層數據格式;科學數據集;中間件;中分辨率成像光譜儀;柵格數據;C#語言

1 概述

分層數據格式(Hierarchical Data Format,HDF)是目前遙感衛星數據普遍采用的數據存儲格式,因此利用軟件編程提取包括在HDF文件里的數據是應用遙感數據的前提[1],具有重要的現實意義。HDF4是HDF文件的一種常用格式,也是中分辨率成像光譜儀(Moderate-resolution Imaging Spectroradiometer,MODIS)產品數據的常用存儲格式。MODIS是搭載在地球觀測系統(Earth Observing

System,EOS)AM和PM衛星上的關鍵設備,每兩天就可以提供從可見光到紅外波段的地球陸地、海洋和大氣全面的全球觀測數據[2]。隨著MODIS數據在國內遙感研究領域的大量應用,HDF格式逐漸廣為人知[3],眾多學者也開展了一系列相關研究,為遙感信息產品的廣泛使用進行積極的探索。

HDF4可以存儲多種類型的數據,但是文件數據結構復雜。目前,HDF Group開發出HDF函數庫來實現對HDF文件的讀寫,但HDF庫函數只支持C和FORTRAN語言[1],導致其他常見開發語言無法直接讀寫HDF4文件,為遙感產品的廣泛應用帶來不便。在環保部生態環境遙感產品生產分系統項目中,需要對一系列MODIS產品進行處理,而C#語言沒有系統地操作HDF4文件的方法,在操作多數據集的HDF4文件時遇到了問題。目前流行的GIS桌面操作軟件ArcGIS Desktop盡管支持訪問各種矢量格式及大部分的柵格數據格式,但不支持多數據集層次式存儲的HDF數據格式[4]。

針對以上問題,同時考慮到技術開發路線以及.net平臺和C#開發語言在實際應用中非常廣泛,本文以C#為例,設計一種讀寫HDF4文件數據集的中間件,解決HDF4中多數據集文件的創建問題與普通數據類型向高級語言常用數據類型的轉換。

2 總體設計思想

HDF的數據結構基本上可表示任何類型的數據[5]。HDF格式還提供命令方式,分析現存HDF文件的結構,并即時顯示圖像內容[6]。HDF4和HDF5是HDF文件的2種格式,目前,HDF4在科學界使用得較為廣泛。HDF4有6種基本數據類型:光柵圖像,調色板,科學數據集,注釋,虛擬數據和虛擬組[7]。在HDF4文件中通常將含有相關性的數據對象分為一組,這些數據對象組稱為科學數據集[8]。科學數據集有一些屬性參數,可以對數據對象進行自我描述[9]。圖1為HDF4文件科學數據集中間件的示意圖,本文通過對C語言應用程序接口以及C#應用程序接口的設計,實現了C#讀寫多數據集、多波段的HDF4文件等各種功能。

圖1 HDF4文件科學數據集中間件示意圖

3 中間件的設計與實現

本文研究使用的操作系統是Windows 7,開發工具是Microsoft Visual Studio 2012,通過對2種接口的設計與實現,該中間件解決了C#讀寫HDF4文件的問題。本節主要介紹該中間件的具體實現過程。

3.1 核心技術

HDF4文件中的屬性包括預定義屬性和用戶定義屬性,用戶可以更改預定義屬性值,可以添加和刪除用戶自定義屬性及屬性值。通過該中間件,用戶可以讀寫HDF4文件的影像相關信息,也可以讀寫科學數據集中各個波段的信息,如圖像4個邊界的經緯度信息、圖像4個角及中心點的坐標、太陽高度角信息等。

由于HDF4文件中含有一些不常見的數據類型,C#語言中沒有與之對應的數據類型,故C#無法讀寫HDF4文件。針對這個問題,本文通過設計2種接口,使得C#也可以讀寫HDF4文件。本節以數據類型char8的用戶自定義屬性為例,介紹C#實現讀寫不常見類型char8的過程。

3.1.1 C語言庫與C++之間的接口設計

首先,建立一個VC++的動態鏈接庫項目,項目屬性為X64,在可執行文件的同級目錄下放入它的幾個C語言依賴項(HDF官網下載[10]),如szip.lib, zlib.lib,hdfdll.lib,hdf_fcstubdll.lib,hdf_fortandll.lib等。

其次,添加頭文件“mfhdf.h”,編寫C語言與

C++的函數接口。下面以其中一個功能為獲得類型為字符串的屬性值函數Example1為例進行說明。

變量file_data中數據的類型為char8,而C#中沒有與之對應的類型,這就需要C++對其進行轉換,這里使用了指針類型int8?,以供C#通過C++與C#的相應接口獲得數據。

此外,C++函數的關鍵字extern"C"和declspec (dllexport)在生成動態鏈接庫時必須添加,extern" C"使C++能夠調用C語言的庫文件,__declspec (dllexport)的作用是將函數名存儲在DLL的導出表中。所有接口函數編寫完畢時,即可編譯生成相應的動態鏈接庫HDF4Write.dll。

3.1.2 C++與C#之間的接口設計

首先,將VC++項目生成的動態鏈接庫HDF4Write.dll添加到相應的C#項目中,并聲明與VC++項目中對應的接口函數。此時,該C#項目即可對HDF4文件進行讀寫操作。下面是與Example1相對應的在C#項目中聲明的函數。

Example2中的關鍵內容是函數上方的Dll-Import屬性,其中“HDF4Write.dll”指的是引用的動態鏈接庫的名稱,EntryPoint指的是動態鏈接庫中定義的函數(此處為Example1的函數)名稱。IntPtr是指針類型,這里與Example1中的int8?對應,得到指針IntPtr后再經過字符串轉換就可以得到file_data的值。從Example1和Example2可以看出,函數的返回值和參數要一一對應,并需要相應的關鍵字進行接口匹配,這是C#調用VC++動態鏈接庫的核心部分。以上操作即可實現將char8類型的數據轉換為相應字符串。其他不常見數據類型的轉換過程與char8類似。

3.2 基本函數的再封裝

通過C#項目調用VC++動態鏈接庫得到的函數,是一些具有單一功能的基本函數(如Example2中的函數),為使讀寫HDF4文件更加簡便,減少代碼的重復編寫,提高編程效率,對這些基本函數進行再封裝,詳見Example3。

如Example3所示,語句(4)、語句(5)、語句(7)、語句(8)的作用分別是打開指定HDF4文件、選擇數據集、關閉已選擇的數據集,關閉已打開文件。每對某個數據集寫入一次數據,都需要進行打開文件、選定數據集等同樣的操作,語句(4)、語句(5)、語句(7)、語句(8)都要重復添加,Example3把數據集寫入函數writeSD(),以及對語句(4)、語句(5)、語句(7)、語句(8)進行了封裝,封裝為WriteSDByFile()函數。封裝后,只需調用WriteSDByFile()函數即可完成數據集的寫入。

綜上所述,對基本函數進行再封裝,使封裝后的函數具有獨立的功能,使得操作HDF4文件時方便易用,減少了冗余代碼,結構更加清晰易懂。

4 HDF4文件的操作流程及功能介紹

4.1 函數功能

本節對本文設計的主要基本功能函數進行介紹,這些基本函數主要包括文件操作類、屬性操作類和數據集操作類。通過這些基本函數,可以實現更多復雜的功能,如獲取和設置數據集中各個波段的名稱、圖像的地理空間范圍、圖像的表觀反射率值等,可以滿足本項目對MODIS產品數據處理的要求。

表1為中間件主要基本功能函數列表,并對各個函數的功能進行了簡單的介紹。

表1 中間件主要基本功能函數列表

4.2 HDF4文件操作的基本流程

科學數據集是一組用來存儲和描述多維數組的科學數據的數據結構[11]。HDF4文件能夠存儲不同種類的科學數據集,為了方便地在C#環境下使用HDF4文件,本文在實現了C#中讀寫HDF4文件的功能后,對C#中的功能函數進行了再封裝,使得在C#項目下操作HDF4文件簡單易用,使研究遙感圖像的人員能夠將更多的時間和精力用于數據分析。

圖2為關于讀寫HDF4文件的基本流程。

圖2 讀寫HDF4文件的基本流程

Step 1用本文的自定義函數StartFile()打開文件,打開方式有創建、讀和寫,當打開文件失敗時,返回狀態值-1。其中,以創建方式打開會新建一個文件,并覆蓋原重名文件。

Step 2如果只對HDF4文件的公共屬性進行讀寫、查看各個數據集的名稱和索引,即處理的是該HDF4文件的公共信息,不需選擇數據集,則處理過公共信息之后,直接跳至Step6。

Step 3如果需要對指定的數據集進行屬性或者數據集中數據的操作。首先,可以使用函數GetIndexByName()獲得該數據集在HDF4文件中的索引號;然后,根據該索引號,使用函數SelectSD()選擇科學數據集,并返回數據集的ID號;如果需要創建新的數據集,則可利用函數CreateSD()創建一個新的數據集,根據需要創建二維科學數據集或者三維科學數據集,并返回該數據集的ID號;如果選擇數據集失敗,則返回狀態值-1。

Step 4根據Step3中返回的ID號,可以對選定的數據集進行讀寫操作,如果數據集中有多個波段,可以對特定波段進行操作;如果讀寫數據集失敗,則返回狀態值-1。

Step 5在對數據集操作結束后,使用函數EndSD()關閉選定的數據集。

Step 6在對某個HDF4文件操作結束后,使用函數EndFile()關閉數據文件。

5 用例分析

為了更直觀、形象地說明該中間件訪問HDF4文件的功能,本節通過對項目中用到一個MODIS產品的介紹和一個具體的例子,說明該中間件的使用方法,同時驗證本研究的實用性。

5.1 項目需求

環保部生態環境遙感產品生產分系統項目主要是對各種遙感數據進行提取和分析。本項目中用到的

產品有土地利用與生態系統產品、城市環境遙感應用產品、國家級自然保護區動態監測與評價產品等。本節以葉綠素吸收比值指數CARI產品為例進行分析。

葉綠素吸收比值指數CARI產品是通過測量位于670 nm,550 nm和700 nm處的葉綠素相對深度來獲取葉綠素的含量信息。CARI值的計算公式如下:

其中,a,b指葉綠素a和葉綠素b;ρx為反射率;X=700, 670,500,550波段的DN值。ρx的獲取過程為ρx=X/ax×cosθ,θ為太陽天頂角,θ=90-α,α可通過對應的HDF影像的屬性太陽高度角SunElevation獲得。

綜上可知,只需通過本中間件獲取HDF4文件中相應波段的DN值和屬性太陽高度角Sun-Elevation即可計算出葉綠素吸收比值指數CARI的值,其他MODIS產品處理過程與此例類似。

5.2 應用實例

本節主要介紹如下內容:

(1)創建HDF4文件,并將其讀入內存;

(2)為該HDF4文件添加一個用戶自定義屬性;

(3)創建含有多波段的三維數據集,將相應的柵格數據寫入該數據集,并為其添加一個用戶自定義屬性;

(4)關閉該數據集以及HDF4文件。

下面為具體的例子及說明:

(1)創建一個HDF4文件,文件名為test.hdf。

int FileID=StartFile("E:\test.hdf","create")其中,第1個參數表示HDF4文件的絕對路徑;第2個參數表示執行創建操作;最后返回文件ID號。

(2)向test.hdf文件中添加一個字符串類型的屬性。

其中,第1個參數表示文件或數據集ID號;第2個參數表示屬性名稱;第3個參數表示屬性值;第4個參數表示該屬性的數據類型;第5個參數表示是否為文件的公共屬性,如果為-1時表示該屬性為文件的公共屬性。

(3)創建一個三維數據集,數據集名稱為firstSD。

sdsID=createThreeSD(FileID,"firstSD",4,5,6)其中,函數createThreeSD的第1個參數表示文件ID號,第2個參數表示數據集名稱,后面的3個參數依次表示該數據集各維的大小。

(4)向數據集中寫入數組。

WriteSDByFile(sdsID,ref data[0])

其中,第1個參數表示數據集的標識ID號;第2個參數是數組的首地址;數組data是float類型的數組;數組元素個數為120(即4×5×6)。

除了那些用途廣泛的語言程序以外,目前還有多款專門用于瀏覽HDF文件的軟件工具[12],HDF Explorer即是其中之一。圖3為使用HDF Explorer打開test.hdf文件獲取的該數據集中第1個波段的數據,該數據集共有6個波段,其他波段數據的顯示方法與圖3相同。

圖3 第1個波段中的數據

(5)向數據集中添加float類型屬性。

SetAttributeValue(sdsID,"testFloat","5","float",0)其中,第1個參數表示文件或數據集ID號;第2個參數表示屬性名稱;第3個參數表示屬性值;第4個參數表示該屬性的數據類型;第5個參數表示數據集名稱,如果為0時表示該屬性為數據集屬性。

(6)先后關閉數據集以及文件。

EndSD(sdsID)

status=EndFile(FileID)

執行過上述步驟后,一個簡單的實例完成。從以上例子可以看出,該中間件的引入使C#開發人員可以直接創建多數據集、多波段的HDF4文件,可以完整地對HDF4文件進行操作。

6 結束語

HDF4文件為MODIS數據常用的存儲形式,全球許多國家和地區都在使用MODIS數據。HDF4文件是遙感圖像的一種,由于它可以存儲不同類型的數據,得到了較廣泛的應用。目前,只有C語言和Fortran語言可以直接讀寫HDF4文件,其他語言則不能方便地讀寫HDF4文件。本文以C#為例,設計一種能夠使C#直接訪問HDF4文件的中間件,解決基于C#語言讀寫多數據集HDF4文件與普通數據類型向高級語言常用數據類型轉換的問題,并通過進一步的封裝,有效地提高了編程效率。

隨著對HDF4文件的進一步探索,將在以下兩方面繼續對HDF4文件的讀寫進行研究:(1)對HDF4文件的另外5種數據類型進行研究,完善由C #語言操作HDF4文件的問題,為C#語言處理HDF4文件提供更方便、更高效的接口;(2)根據本文的設計理念,構造出一種面向多種常用語言的HDF4文件數據集的通用中間件。

[1]王繼成,蔣狄微,謝智劍.基于GDAL的HDF文件格式柵格數據提取的研究[J].計算機技術與信息發展, 2011,(8):63-64.

[2]路文海.IDL語言處理HDF格式遙感數據的研究[J].海洋信息技術,2006,(3):6-8.

[3]王永韜,劉良明.HDF5格式特點及其對遙感數據格式標準化的幾點啟示[J].國土資源遙感,2005,(3): 39-43.

[4]申 煥,石曉春,胡勇修.利用GDAL擴展ArcGIS Engine對HDF文件的支持[J].測繪地理信息,2013, (3):43-45.

[5]Duerr R E,Cao P,Crider J,et al.Ensuring Long-term Access to Remotely Sensed Data with Layout Maps[J].IEEE Transactions on Geoscience and Remote Sensing, 2009,47(1):123-129.

[6]焦 飛,黃天文.基于.NET的HDF光柵圖像數據的讀取與處理[J].計算機系統應用,2007,(10):48-51.

[7]史 磊,張 柯,洪俊光.基于HDF4格式的MODIS 1B影像數據讀取的算法研究[J].巢湖學院學報, 2008,(3):73-76.

[8]張 莉,曾致遠.基于HDF4文件格式的MODIS 1B影像數據提取的研究與實現[J].國土資源遙感, 2004,(4):27-32.

[9]國家MODIS數據中心.安全數據表SDS[EB/OL].(2012-03-10).http://satellite.cma.gov.cn/PortalSite/ eos/format1b2.html.

[10]HDF4.HDF5/Tools API Specification[EB/OL].(2014-01-08).http://www.hdfgroup.org/products/hdf4.

[11]NCSA.HDF4.2.9 User's Guide.pdf[EB/OL].(2013-02-10).http://www.hdfgroup.org/doc.html.

[12]白 龍,雷 惠,張 翾.用MATLAB讀取HDF格式數據的實用方法[J].儀器儀表學報,2010,(8):434-438.

編輯 顧逸斐

Design and Implementation of HDF4 File Access Middleware

SHEN Xiajiong1a,1b,MA Rui1a,HAN Daojun1a,1b,ZHOU Bing1a,2
(1a.School of Computer and Information Engineering;b.Institute of Data and Knowledge Engineering, Henan University,Kaifeng 475004,China;2.Institute of Image Processing and Pattern Recognition,Kaifeng 475004,China)

HDF4 files are used to store the data of Moderate-resolution Imaging Spectroradiometer(MODIS)products, and it can store various types of data,but its data structure is complex.At present,the function libraries of HDF4 file which are developed by HDF GROUP can only be used in Fortran and C language,other programming languages lack the method of reading and writing HDF4 file systematically.Although ArcGIS supports most of the raster data,it does not support multiple data sets hierarchical storage of HDF data format.This thesis designs a middleware based on C#language of operating HDF4 file,and it solves some problems such as ArcGIS unable to create multiple datasets HDF4 file,and it introduces the core idea and the concrete application of the middleware instances.This middleware is applied in environmental protection of the ecological environment of remote sensing products production system project,and it solves some problems such as C#language unable to create multiple datasets HDF4 file when handing MODIS product data,and it verifies the practicality.

HierarchicalDataFormat(HDF);scientificdataset;middleware;Moderate-resolutionImaging Spectroradiometer(MODIS);raster data;C#language

沈夏炯,馬 瑞,韓道軍,等.HDF4文件訪問中間件的設計與實現[J].計算機工程,2015, 41(3):278-282,286.

英文引用格式:Shen Xiajiong,Ma Rui,Han Daojun,et al.Design and Implementation of HDF4 File Access Middleware[J].Computer Engineering,2015,41(3):278-282,286.

1000-3428(2015)03-0278-05

:A

:TP311

10.3969/j.issn.1000-3428.2015.03.052

國家自然科學基金資助項目(61272545);河南省科技廳科技攻關計劃基金資助項目(142102210390);河南省教育廳自然科學基金資助項目(13B520918)。

沈夏炯(1963-),男,教授、博士,主研方向:空間數據處理;馬 瑞,碩士研究生;韓道軍、周 兵,副教授、博士。

2014-04-01

:2014-05-06E-mail:15093617922@163.com

主站蜘蛛池模板: 亚洲欧美综合在线观看| 久996视频精品免费观看| 8090成人午夜精品| 五月天在线网站| 亚洲系列无码专区偷窥无码| 日本一区二区不卡视频| 日本福利视频网站| 久久免费精品琪琪| 国产欧美亚洲精品第3页在线| 国产第一页免费浮力影院| 亚洲人成成无码网WWW| 秋霞午夜国产精品成人片| 91破解版在线亚洲| 亚洲国产成人在线| 国产日韩欧美在线视频免费观看| 国产国产人成免费视频77777| 五月天婷婷网亚洲综合在线| 91视频区| 91亚洲精选| 九色在线视频导航91| 亚洲男女在线| 久久久久人妻精品一区三寸蜜桃| 91小视频在线观看| 狠狠干欧美| 一级一级一片免费| 亚洲人网站| 人妻丰满熟妇αv无码| 亚洲妓女综合网995久久| 1024国产在线| 国产专区综合另类日韩一区| 9久久伊人精品综合| 国内精品九九久久久精品| 亚洲aaa视频| 亚洲中文在线视频| 国产特一级毛片| 国产免费人成视频网| 在线无码九区| 99在线国产| 欧美a在线| 日本道综合一本久久久88| 亚洲国产无码有码| 国产色婷婷视频在线观看| 国产成在线观看免费视频 | 丁香婷婷久久| 亚洲中文字幕久久精品无码一区 | 亚洲av无码专区久久蜜芽| 国产亚洲精品97AA片在线播放| 97视频在线精品国自产拍| 欧美一级在线播放| 午夜一区二区三区| 国产精品白浆在线播放| 国产乱肥老妇精品视频| 夜夜操狠狠操| 亚洲国产亚综合在线区| 亚洲综合一区国产精品| 日韩国产 在线| 欧美在线观看不卡| 国产91高跟丝袜| 中文纯内无码H| 国产综合网站| 欧美成人午夜视频| 综合久久五月天| 全裸无码专区| 欧美成人一级| 国产一级二级在线观看| 97超爽成人免费视频在线播放| 热九九精品| 亚洲综合色婷婷中文字幕| 国产乱人伦精品一区二区| 中文字幕免费播放| 欧美不卡二区| 国产91丝袜| 青草免费在线观看| 国产毛片片精品天天看视频| 免费一级毛片在线播放傲雪网| 一本久道久久综合多人| 网久久综合| 五月婷婷中文字幕| 国产成人亚洲无码淙合青草| 免费无码又爽又黄又刺激网站 | 欧美a在线看| 青青草原国产|