2022年HDF数据结构研究 .pdf
《2022年HDF数据结构研究 .pdf》由会员分享,可在线阅读,更多相关《2022年HDF数据结构研究 .pdf(16页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、HDF 数据结构研究1. HDF 概念HDF ,Hierarchical Data Format,分层数据格式,美国国家高级计算应用中心NCSA (National Center for Supercomputing Applications)为了满足各领域研究需求而研制的一种能高效存储和分发科学数据的新型数据格式,是一种分层式数据管理结构,被地球观测系统数据和信息系统核心系统所选用作为标准数据格式。它的表现形式是一种多目标的文件格式,目的是为了在分布式环境中共享科学数据。HDF 文件格式的优势在于:可移植性强(独立于操作平台);属于超文本文件;可以存储并处理大数据量;一个文件集可以管理多种类
2、型的数据结构;具有可扩展性。由于 HDF 的诸多优点, 这种格式已经被广泛用于目前国外各种卫星传感器的标准数据格式。在影像数据库多源数据管理中,HDF 格式发挥了很好的作用,利用HDF 数据结构建立远程图象工程, 并与数据库进行交互; 可以进行远程图像处理;远程影像解译, 统计分析; 影像运算、 信息挖掘、影像分类;综合处理影像、矢量、高程数据,三维可视显示等。2. HDF数据结构HDF 文件有六种主要数据类型,如图:1. 栅格图像 Raster Image:数据模式提供一种灵活方式存储、描述栅格图像数据,包括8bit 栅格图像。2调色板 Palette:也叫作彩色查对表,它提供图像的色谱。3
3、. 科学数据集 Scientific Data Set:用来存储和描述多维科学数据陈列。4.HDF注释 Annotation:是文字串,用来描述HDF 文件或 HDF 数据目标。5.Vdata :是一个框架,用于存储和描述数据表。6.Vgroup :是用来把相关数据目标联系起来。一个Vgroup 可以含有其它 Vgroup,以及数据目标。任一个HDF 目标均可以包括进某个Vgroup 中。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 16 页 - - - - - - -
4、 - - 而在 HDF5 中,建立一个新的HDF 文件后,会有5 种数据格式显示:HDF4 中只有前三种,但nasa下来的数据再HDFview 里面显示的是版本4. 3. 对 于NASA的MERRA300.prod.assim.inst6_3d_ana_Nv.2010 0531.hdf 进行的格式研究。其中有基于SD(science data )和 GD(Vgroup ID )两种方式对HDF 文件进行处理,例如下图, EOSGRID 就是一个Vgroup ,而 PS 就是一个 SD 的 datafield。利用 SD 方式进行读写1) SD 方式读取的变量,是整个HDF 文件的变量,没有层次
5、结构的显示,下面是输出的和HDFview 比对的结果。FUNCTIONHDF_SD_VARDIR, HDFID varnames = hdf_sd_fileinfo, hdfid, nvars, ngatts if (nvars gt0) thenbegin varnames = strarr(nvars) for index = 0L, nvars - 1L do beginvarid = hdf_sd_select (hdfid, index)hdf_sd_getinfo, varid, name=name hdf_sd_endaccess, varid varnamesindex = n
6、ame endforendifreturn, varnames END IDL pp=hdf_sd_vardir(hdfid)IDL print,ppPS DELP T U V QV O3 XDim:EOSGRID YDim:EOSGRID Height:EOSGRID TIME:EOSGRID XDim YDim 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 16 页 - - - - - - - - - Height Time2) SD 方式读取的属性,当变量输入为空
7、时,显示的是整个HDF 文件的属性。下面是输出的和 HDFview 比对的结果。FUNCTIONHDF_SD_ATTDIR , HDFID, VARNAME if ( n_elements (hdfid) eq 0) then $ message, HDFID is undefinedattnames = if (varname eq ) thenbeginhdf_sd_fileinfo, hdfid, nvars, natts endifelsebegin index = hdf_sd_nametoindex(hdfid, varname) varid = hdf_sd_select(hdf
8、id, index) hdf_sd_getinfo, varid, natts=natts endelseif (natts gt0) thenbegin attnames = strarr(natts) for index = 0L, natts-1 do beginif (varname eq ) thenbeginhdf_sd_attrinfo, hdfid, index,name=name endifelsebeginhdf_sd_attrinfo, varid, index,name=name endelse attnamesindex = name endforendifif (v
9、arname ne ) thenhdf_sd_endaccess, varid return, attnames ENDIDL kk=HDF_SD_ATTDIR(hdfid,)IDL print,kkHDFEOSVersion StructMetadata.0 missing_value Conventions title history institution source references comment contact ks nstep ptop pint ak bk CoreMetadata.0 ArchivedMetadata.0名师资料总结 - - -精品资料欢迎下载 - -
10、- - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 16 页 - - - - - - - - - 3)SD 的一些概念(即上例打开文件所用的hdfid )科学数据集即SD (Science Data Set)的 ID 号和已在 HDF 文件结构中定义的地球物理参数名的关系,然后读取数据 HDF_SD_GETDATA 到内存中,关闭数据文件HDF_SD_ENDACCESS, HDF_END 。每打开一个 HDF 文件将会分配个SD_ID ,应该是相当于临时的内存号之类的。(每次的ID值不一样)IDL hdfid=hdf_sd_
11、start(MERRA300.prod.assim.inst6_3d_ana_Nv.20100531.hdf)% Loaded DLM: HDF. IDL print,hdfid 393216 IDL hdfid=hdf_sd_start(MERRA300.prod.assim.inst6_3d_ana_Nv.20100531.hdf)IDL print,hdfid 17170433 IDL hdfid=hdf_sd_start(MERRA300.prod.assim.inst6_3d_ana_Nv.20100531.hdf)IDL print,hdfid33947650 4)SD方式将已有H
12、DF文件的数据写入单个Vgroup 的 HDF文件。以读取MERRA300.prod.assim.inst6_3d_ana_Nv.20100531.hdf的 EOSGRID ( Vgroup )下的PS datafield为例:fid= EOS_GD_OPEN(MERRA300.prod.assim.inst6_3d_ana_Nv.20100531.hdf,/READ) grid= EOS_GD_ATTACH(fid,EOSGRID ) r7 = EOS_GD_FIELDINFO (grid,PS , rank, dims, numbertype, dimlist) 名师资料总结 - - -精
13、品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 16 页 - - - - - - - - - r6 = EOS_GD_READFIELD(grid,PS ,data) k=dims pp=fltarr(dims) pp=data hdfid= hdf_sd_start( 20100531.hdf,/create) varid= hdf_sd_create(hdfid,PSD ,k,/DFNT_FLOAT32) dimid= hdf_sd_dimgetid( varid , 0) hdf_sd_di
14、mset,dimid,name=xdimdimid= hdf_sd_dimgetid(varid,1) hdf_sd_dimset,dimid,name=ydimdimid= hdf_sd_dimgetid(varid,2) hdf_sd_dimset,dimid,name=timehdf_sd_adddata,varid,data hdf_sd_attrset,varid,qym , IDL exampleshdf_sd_attrset,hdfid,creation_data, systime () hdf_sd_endaccess,varid hdf_sd_end ,hdfid 此程序是将
15、PS中的数据写入到新建的20100531.hdf文件的 PSD datafield中,在 HDFview 中的效果:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 16 页 - - - - - - - - - 如果在打开它们的时候调整它们的维度选择,以图形方式打开:注意: 1.在 HDFview 中自己添加datafield 在 IDL 程序中识别不了。2HDFview 中不能删去元素。利用 GD 方式进行读写1 )多个 Vgroup( 由 gridID 标识 )打开方法
16、的探究1. 读取 Vgroup 相关信息A相关信息: Result = EOS_GD_GRIDINFO( gridID , xdimsize, ydimsize, upleft, lowright )- This function returns the number of rows, columns and the location, in meters, of the upper left and lower right corners of the grid image. BVgroup 数目: Result = EOS_GD_INQGRID( filename, gridlist ,
17、LENGTH= variable ) C直接从filename 和 gridname 读取相关信息:Result = EOS_GD_QUERY( Filename, GridName , Info) 2.读取某个Vgroup 下某个属性的相关东西A值: Result = EOS_GD_READATTR( gridID , attrname, datbuf)值将 datbuf 中,Returns 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 16 页 - - - - -
18、- - - - SUCCEED(0) if successful and FAIL( 1) otherwise. B 相 关 信 息 : Result = EOS_GD_A TTRINFO( gridID , attrname, numbertype, count)Attribute name (string). A named variable that will contain the number type (long) of an attribute. Returns SUCCEED (0) if successful and FAIL ( 1) otherwise. C属性数目:Re
19、sult = EOS_GD_INQA TTRS( gridID , attrlist , LENGTH= variable )3.读取某个Vgroup 下 dataset的相关信息A相关信息: Result = EOS_GD_FIELDINFO( gridID , fieldname, rank, dims, numbertype,dimlist )- This function retrieves information on a specific data field. Bdataset数目: Result = EOS_GD_INQFIELDS(gridID , fieldlist , r
20、ank, numbertype)C. 值 : Result= EOS_GD_READFIELD(gridID , fieldname, buffer, EDGE= array , START= array , STRIDE= array ) 4下面以打开MERRA300.prod.assim.inst6_3d_ana_Nv.20100531.hdf 分析相关datafields 和attributes 为例proanalysisHDF; 根据文件名和Vgroup 名获取信息r1 = EOS_GD_QUERY(MERRA300.prod.assim.inst6_3d_ana_Nv.2010053
21、1.hdf,$ EOSGRID,Info) print, info=,info ; 根据文件名获取Vgroup 个数信息 ( 好像有些识别不了)-r2 = EOS_GD_INQGRID( MERRA300.prod.assim.inst6_3d_ana_Nv.20100531.hdf, gridlist , LENGTH=length) print,gridlist,length ; 打开一个确定的Vgroup;open the filefid= EOS_GD_OPEN(MERRA300.prod.assim.inst6_3d_ana_Nv.20100531.hdf,/READ) ;get t
22、he gridgrid= EOS_GD_ATTACH(fid,EOSGRID ) ; 读取属性数目r3 = EOS_GD_INQATTRS( grid, attrlist, LENGTH=length1) print,attrlist,length1 ; 读取 _FV_U属性相关信息和值r4 = EOS_GD_ATTRINFO(grid,_FV_U , numbertype, count) r5 = EOS_GD_READATTR(grid,_FV_U , datbuf) print,numbertype, count,datbuf ; 读取 datafield数目r6 = EOS_GD_IN
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年HDF数据结构研究 2022 HDF 数据结构 研究
限制150内