1、HDF 数据格式资料 转 来自:数据格式 HDF 是美国国家高级计算机应用中心(National Centerfor Supercomputer Application)为了满足各种领域研究需要而开发出的一种能高效存储和分发科学数 据的新型数据格式。一个HDF 文件中可以包含多种类型的数据,如栅格图像数据, 科学数据集,信息说明数据等,这种数据结构,方便了我们对于信息的提取。例 如,当我们打开一个HDF 图像文件时,除了可以读取图像信息以外,还可以很容易 的查取其地理定位,轨道参数,图像噪声等各种信息参数。HDF 的数据格式是一种 分层式数据管理结构,是一个能够自我描述、多目标、用于科学数据存
2、储和分发的 数据格式。他针对存储和分发科学数据的各种要求提供解决方法。HDF 数据格式设 计特点为: 自我描述性 (Self-Description):一个 HDF 文件可以包含关于该数据的全面信息。 多样性(Diversity):一个 HDF 文件中可以包含多种类型的数据。例如,可以通过 利用适当的 HDF 文件结构,获取 HDF 文件中存储符号,数据和图形数据。 灵活性(Flexibility):可以让用户把相关数据目标集中一个HDF 文件的某个分层 结构中,并对其加以描述,同时可以给数据目标记上标记,方便查取。用户也可以 把科学数据存储到多个HDF 文件中。 可扩展性 (Extensit
3、y):在 HDF 文件中可以加入新数据模式,增强了它与其他标准 格式的兼容性。 独立性(Independibility):HDF 是一种同平台无关的格式。HDF 文件在不同平台间 传递而不用转换格式。 HDF 文件物理存储结构 一个 HDF 文件应包括一个文件头 (FileHeader),一个或多个描述块 (Data Descriptor Block),若干个数据对象 (DataObject)。 文件头:位于 HDF 文件的头四个字节,其内容为四个控制字符的ASCII 码值,四个 控制字符为 N,C,S,A,可用于判断一个文件是否为HDF 文件格式。 数据对象:数据对象是HDF 文件最基本的存
4、储元素。包括一个描述符和一个对应的 数据元素。 描述符:其长度为12 个字节,主要用来描述这个数据元素的某些信息。 头两个字节称为标识符 (Tag) ,其内容为 16位的无符号整数,其作用为确定数据元 素区的数据类型,每一种数据类型都对应一个默认无符号整数。紧跟其后的是两个 字节的参照数 (ReferenceNumber) ,它也是 16位的无符号整数,它是为了区别同 一标识符下的不同数据对象,因此标识符和参照数二者合在一起唯一确定一个数据 对 象。后面的四个字节组成的32位无符号整数表示的是数据元素在HDF 文件中的 偏移量,也就是从文件开始位置到数据元素的起始位置所包含的字节数。最后的四
5、个字节用来表示本描述符所对应的数据元素区所占用的字节数,也是32位无符号 整数。 数据元素:它是数据对象中的裸数据部分,也就是数据本身。可以是字符、整数、 浮点数、数组等。 在实际的 HDF 文件中,描述符并不是和它对应的数据元素连在一起,而是把相关的 许多描述符放在一起,构成一个数据描述符的块(Data Descriptor Block),在这 个块 的后面顺序存储了各个描述符所对应的数据元素。打个比方,这里的描述符相 当于一本书的目录,而数据元素相当于目录中各个章节所对应的实际内容。这种数 据描述符块的前面有对应的块头(BlockHeader) 。块头的内容分为两部分,第一个 部分为 16
6、位无符号整数,表示在这个数据描述符块中数据描述符的个数,第二部 分为 32 位无符号整数,表示了下一个数据描述符块相对于文件起始位置的偏移 量。因此,最后一个数据符块的块头的第二部分的内容为零。总的说来,HDF 文件 中的物理分布格式如下: 文件头(FileHeader) 第一个描述符块 (FirstDescriptor Block) 数据元素 (Data Element) 更多的描述符块以及更多的数据元素等等 关于数据描述符块和数据元素在HDF 文件中分布的唯一规则就是第一个数据描述符 块必须紧跟在文件头后。在此之后的数据描述块的块头中的偏移量把数据描述符块 连接起来,而每个数据描述符中的偏
7、移量又把数据描述符和数据元素连接起来。 HDF 数据类型 在这里首先明确两个概念,数据集(DataSets) 和组(Groups) 。HDF 文件通常包含 几个密切相关的数据对象,把这些数据对象放在一起形成一个数据集,以满足特殊 用户的要求。 HDF 主要有 6种主要数据集:栅格图像 (Raster Images Sets)、调色 板(PaletteSets)、科学数据库 (Scientific DataSets)、注释(Annotation)、 Vsets 和 Vgroup,例如,五个或者六个数据对象可以用来描述一个栅格图像;八个 或者更多的数据对象可以用来描述一次科学实验的结果,由于要把不
8、同的数据对象 结合起来构成集,就需要一种方法将数据对象有机的结合起来,这样就产生了组的 概念,HDF 的组用来明确和控制数据集。一个组也是一个数据对象,但是它的数据 元素是由一系列的标识符(Tags) 和参照数(Referencenumber) 组成,这些标识符和 参照数所对应的数据对象就可以构成实际的数据集。例如,构成一个栅格图像的五 个或者六个数据对象,它们构成一个集,而它们的标识符和参照数应该放在一个组 所对应的数据元素区中,以将它们联系起来。 以下是几种常用的数据集格式: 栅格图像:数据模式提供一种灵活方法存储。描述栅格图像数据,包括8bit 栅格 图像和 24bit 栅格图像。栅格图
9、像集 (Raster Image Sets)提供用来存储图像和任 意数量的可供选择的图像描述符的框架,通常包含图像数据布局的描述和图像数 据,它还可能包含调色板和颜色校正信息和任何其他相关的用来显示图像的数据。 将所有这些信息联系起来的就是栅格图像组(Raster Image Groups),它包含了所 有这些数据对象的标识符和参照数。这些数据对象的数量不是固定的,可以通过选 择来确定需要的信息。 调色板:提供图像的色谱。调色板是给一幅图像加入颜色的方法,它相当于一个表 格,这个表格可能由不同的大小,但HDF 文件只支持 256色的显示。对于栅格图像 中的每一个数据,在表格中都有其对应的RGB
10、 数值,用来显示颜色。 科学数据集:用来存储和描述多维科学数据陈列。科学数据集提供了一个用来存储 多维数组数据以及其相关信息的框架。数组的数据类型可以是整数或者是浮点数。 它的组织方式与栅格图像相同。科学数据集必须包含的组件有数组、名称、数据类 型和数组的维数。数组是一种多维的数据结构,它是科学数据集的主要组成部分, 存储着所需要的核心数据,比如某一次科学实验结果的数据。科学数据集的名称在 其刚产生的时候就赋予了它,在以后的应用中不能再被改变,它的名称在HDF 文件 中可以不是唯一的,但是唯一的名字将使得在同一文件中区别不同的科学数据集更 加容易。 数据类型指的是存储在数组中数据的类型。数据维
11、数确定了数组的形式和大小。数 组维数的数目被称为数组的阶数,每一维都有一个指针和一个标识符,还包含大小 和名称。指针是用来描述某一维在数组中的位置。而标识符将它与其他维区别开 来。每一维的大小是一个正整数,但是如果其值为零,表示这一维是无限维。另 外,科学数据集还提供了三种类型的可供选择的组件:预定义的属性,用户定义的 属性和维数规模。预定义的属性有保留的名称,在某些情况下还有预定义的数据类 型和数据项目的个数,应用程序可以用预定义的属性来对数据进行操作。用户自定 义属性包含了关于文件、数组或者维数的辅助信息。 Vdata:是一个类似于框架,用于存储和描述数据的表格。Vdata是 verdex
12、 data 的缩写,这种数据格式起初是用来存储多边形顶点和边的信息,但现在它的应用范 围已经被大大扩展了。 Vdata 相当于一个表格,是很多记录(Records) 的集合,每 个 记录的值存储在固定长度的域(Fields)中,所有的记录的数据结构都是相同的, 每个域中的值都有相同的数据类型。一个Vdata 都由一个名称,一个类和一系列单 独的域的名称所唯一确定。 Vdata 的名称主要是用来描述Vdata 的内容,它通常被用来在文件中搜寻Vdata 的 位置,一个 Vdata 的类更进一步的确定了它的数据的用途和目的。最后,Vdata 的 域的名称是用来分配给Vdata 域的标签。每一个记录
13、是由一个或更多的固定长度的 域所组成。 Vdata的记录和域由指针来标识。这个指针是从零开始依次递增的。每 一个域中的数据都有唯一的类型。同时在一个域总可以有几个组件,组件的个数称 为域的序 (Order) 。 注释(Annotation):文本格式,用来描述HDF 文件自身的属性或者HDF 数据目标。 我们通常需要把一个关于HDF 文件信息的文本文件的注释联系起来,或者直接存储 在 HDF 文件中。 HDF 提供了两种实现这一目的方法:注释数据对象和属性的分配。 需要注意的是注释本身也是一种数据对象,因此它也有自己的描述符,并指向了包 含有注释信息的数据元素。这个数据元素有以下的信息:被注释
14、对象的标识符和参 照数以及注释本身。 Vgroup:用来将数据对象联系起来。一个Vgroup 中可以包含其他的 Vgroup 或者 HDF 数据对象,因此这种结构类似于Unix 文件结构。属于同一个Vgroup的数据对 象通常被称为 Vgroup 的成员,Vgroup必须有一个名称以及一个可供选择的与其相 联系的 Vgroup 类,此二者被用来描述属于同一个Vgroup 的数据对象并将其分类。 Vgroup 的名称是字符串,在HDF 文件中不同的 Vgroup可以有相同的名字,但是不 同的名字可以使得区分Vgroup 更加容易, Vgroup类也是一个数据字符串,能够用 来 根据数据对象的使用
15、目的来分类。同时需要注意的是,Vgroup可以包含任意数 目的 Vgroups 和数据对象,包括其他Vgroup 的成员。HDF 函数库及其应用接口 (API) HDF 文件可以被看作几个接口层。在它的最底层,HDF 是用来存储科学数据的物理 文件格式。在它的最高层,HDF 是用来操作、显示和分析存储在HDF 文件中数据的 应用程序集合。在这些接口层之间,HDF 是用来提供高层和底层编程接口的软件 库,它也包括一些支持软件,可以使存储、检索、显示和分析以及操作存储在HDF 文件中的数据更加容易。 最基本的接口层是为软件开发者保留的。它被用来直接进行文件的数据流的输入输 出、错误处理、内存管理和
16、物理存储。它是对有经验的HDF 程序员用来开发而比现 有所用的软件更加完善的高层应用程序接口的软件工具,而这种底层的编程只能用 C 语言来完成。 再上的一层,是 HDF 应用程序接口,包括几个相互独立的函数组,每一组都使专门 用来简化存取某一种数据类型的过程。虽然每一个接口都需要编程,但是所有的底 层的详细过程可以忽略。大多数情况下,程序员所需要做的事情就是在恰当的时候 调用恰当的函数,接口会完成剩下的任务,程序员不必考虑。这一层也只能在C 语 言的环境中所使用。 最高层是通用应用程序,它包括现有的一些比较完善的高级应用程序,可以对HDF 文件操作和读取。 HDF 函数库的源代码可以在NCSA
17、 的匿名 FTP 服务器 ftp.ncsa.uiuc.edu上获得。 但要使得这些函数库可用却是一件很麻烦的事情。这一过程可以分为编译、连接、 安装、载入 VC 等几大量过程。我们从相关网站上下载了过程的介绍并在计算机上 实现。但实际操作中遇到了很多意想不到的问题,耽误了相当多的时间,但最终都 得到了解决。 高层 HDF 应用程序接口,可以分作两部分,多文件接口和单文件接口。多文件接口 是指在一个应用程序中能够同时存取几个HDF 文件的接口,而单文件接口则不具备 这种功能。 HDF 输入输出函数库是由存取数据对象和相关信息的C 和 FORTRAN-77 函数所构成。一般来说,尽管在不同的数据对
18、象类型中有一些函数功能是重叠的, 但一般来说,一种应用程序接口只能够操作一种类型的数据对象。当每调用一种数 据类型的专用接口时,其他的数据类型对用户来说都是不可见的,相当于在HDF 文 件中只有这一种数据类型的数据结构存在。新的多文件程序接口包括以下几种。 SDAPI:用来存储、管理和检索多维数组数据,包括它们的维数和属性等信息。这 个 API中的函数可以在 C 程序中调用,获得科学数据集的所有信息。具体的函数调 用格式在 HDF Users Guide 中有详细的介绍。 VSAPI:存储、管理和检索以目录(Records) 形式存储在表格中的数据。利用这个 接口可以获得 Vdata 的任何信
19、息,也就是前述表格中的各种数据。 V API:产生任何主要的 HDF 数据结构的组 (Groups) 。通过这个接口可以获得 Vgroup 的任何信息。 GR API:存储、管理和检索栅格图像数据,包括它们的维数和调色板等信息。栅格 图像数据的所有信息可以通过这个接口获得。 ANAPI:存储、管理和检索用来描述文件或者文件中任何一种数据结构的文档。所 有的注释信息可以由此获得。 由于单文件接口现在已经很少使用,在这里就不再详细介绍了。HDF-EOS 数据格式 EOS 是 EarthObservatory System的简称。可以认为HDF-EOS 是 HDF 的扩展,用 以满足更多的需要。在H
20、DF-EOS 中,有前面提到的栅格图像和多维数组,然而也有 一些 EOS 类型的数据并不与 HDF 类型直接匹配,特别是地理标识数据类型 (Geolocation Datatype)。为了将 EOS 数据产品的需要同 HDF 联系起来,在 HDF 中 又定义了三种新型的数据类型:点型(Point) 、带型(Swath) 、网格型 (Grid) 。每一 种数 据都与 HDF 标准类型组织起来,并由特殊的应用程序接口所支持,这有助于开 发者的 工作。 这些新的应用程序接口组成了HDF-EOS 函数库。点型数据的接口是用来支持与地理 标识有关的信息,但并没有由明确的空间和时间信息所组织起来。带型数据
21、接口是 专门用于时序性很强的数据,例如卫星扫描带的数据类型。网格型数据类型接口是 用来支持固定投影的数组数据。下面对这三种数据结构作一个简单的介绍。 点型(Point) :是由一系列的在不同时间间隔内和在分散的地理位置所记录的数 据。点型数据是由HDF-EOS 所支持的最松散的地理标识数据的组织形式。它的形式 很简单,每一个数据记录都由一系列的一个或多个数值所组成,这些数值在某种意 义上表示了某一点的时间或空间的状态。它的组织形式同HDF 的其他数据结构一 样,也是通过 Vgroup 将数据对象组织起来。在此就不作详细的介绍了。当存取一 个点型数据集时,它由在创建时所分配给的名称所标识。该名称
22、用来得到一个点型 数据标识符,在以后的操作中都由这个标识符来唯一确定。关于点型数据集的信息 的获取在 HDF-EOS Uses Guide中有详细的介绍。 带型(Swath) :HDF-EOS 中的带型数据的概念是基于典型的卫星扫描带的形式建立 起来的。卫星的扫描仪器在垂直于卫星运动轨迹的方向上进行扫描,形成了这样的 扫描带。而另一种与带型数据相类似的数据格式,来源于对垂直于前述扫描平面的 侧面上的信息进行扫描的仪器。事实上可以将两个实际扫描方向上的扫描数据结合 起来构成一个三维的数组,每一维代表空间上的一个方向。带型数据的目的是将这 样的一个三维科学数据于地球上具体的点对应起来。标准的带型数
23、据由四个主要部 分所组成: 数据域(Data Fields):包括地球观测的科学数据。通常为二维数据,但也可以有 从一维到八维的变化。 地理标识域 (GeolocationFields):将扫描的数据带与地球表面的点联系起来。 维数(Dimension) :定义了数据和地理标识域的三个轴。 维匹配(DimensionMaps) :定义了数据域和地理标识域之间的关系。当地理标识维 与数据维的大小不一样时,在它们之间就存在一个偏移和增量的关系。这些匹配关 系可以被称作带型数据的黏合剂。 带型数据的这四个组件的定义通常是作为全局属性。例如,一个单独的包含有用来 阐述地理标识的 MODIS 带型数据的
24、信息的文档块,就具有这样的属性。这种全局属 性的组织结构完全是模仿Vgroup 的组织形式,也就是相关的HDF 数据对象的集 合。 带型数据结构的全局属性被HDF-EOS 函数库用来将标准数据组织成带型数据结 构,这种属性不能被用户直接读取。HDF-EOS 的工具和函数库通过读取这种属性来 阐述科学数据和地理标识信息之间的关系。开发人员可以用HDF-EOS 函数库来处理 带型数据。关于这些函数的详细用法可以在HDF-EOS Uses Guide中查到。 网格型(Grid) :这种数据格式与带型数据格式相类似,都包含有二维或多维的数据 域。它们的主要区别在于它们的地理标识信息的特征不同。带型数据
25、主要是存储了 一系列单个点的地理标识信息,而网格数据则以简洁的形式包含了一系列的推算公 式和相关的参数。通过对这些信息的处理可以得到网格数据中每一点的地理标识信 息,如经、纬度等。每一个数据域都能够通过给定的标准推算公式来构成一幅地 图。尽管同一个 HDF-EOS 文件中可以有很多的网格型数据,但对于每个网格数据域 的推算公式都是唯一的。在网格数据集中有三个主要的部分: 数据域(Data Fields):是网格数据中最重要的部分,包含了二维或多维数组。 维数(Dimension) :用来将数据域地理标识信息联系起来。每个数据域都必须使用 两个预定义的维: X 和 Y。尽管网格数据域的维数并没有实际的限制,但通常情况 下维数都不超过三个: X、Y 和另一个高度或者深度维。 推算公式 (Projection):是网格数据的核心,推算公式作为一系列数学公式,为地 理标识的解码提供了一条便捷的途径,将地理坐标(经度和纬度 )转换成写于纸上的 X-Y坐标。 MSN 空间完美搬家到新浪博客! 特别声明: 1:资料来源于互联网,版权归属原作者 2:资料内容属于网络意见,与本账号立场无关 3:如有侵权,请告知,立即删除。
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。