翻译自http://cola.gmu.edu/grads/gadoc/SDFdescriptorfile.html

使用GrADS阅读NetCDF和HDF文件

NetCDF和HDF格式的文件被称作自描述文件(self-describing file, SDF),因为数据和元数据一块保存在同一个文件中。GrADS可以读取NetCDF和HDF格式的文件,只要数据是存储在一个规范网格。HDF格式是非常通用的;GrADS接口仅适用于5-D的(lon/lat/lev/time/ensemble)网格化数据集。 GrADS处理HDF4科学数据集和部分HDF5文件。为了读取自描述文件SDF,GrADS需要一个特定的源数据为了将,GrADS需要一定数量的元数据,从而将数据放置在内部网格空间中。有三种方式可以做到这些:

  1. 使用sdfopen命令打开文件。这为用户省去了最少的工作-只需提供文件名(或OPeNDAP URL),其余的工作由GrADS完成。如果使用sdfopen命令打开SDF,则GrADS所需的文件中的所有元数据都必须符合COARDS约定。"sdfopen"界面不支持HDF5格式。如果sdfopen不起作用,则...
  2. 使用xdfopen命令打开文件。这需要进行更多的工作-您必须编写一个数据描述文件来补充或替换现有的元数据,以便GrADS能够理解它。xdfopen使用的描述符文件的语法与栅格化二进制数据(gridded binary data)的描述符文件中使用的语法不完全相同-有关更多详细信息,请参见文档页面。xdfopen命令提供对更多SDF文件的访问,包括许多不符合任何已知标准的SDF。"xdfopen"界面不支持HDF5格式。如果xdfopen不起作用,则...
  3. 使用open命令打开文件。这要求用户编写一个完整的GrADS描述符文件,以覆盖文件中的所有元数据。下面给出了为NetCDF,HDF-SDS或HDF5网格数据文件组成完整描述符文件的指南。另请参考数据描述符文件的元素。如果要遇到以下情况,建议使用'open'接口:将大量数据文件一起模板化,数据是预投影到非经/纬度网格,文件中的变量具有不同的未定义值,或文件中的变量或者文件中的变量以非标准方式存储。'open'接口是读取HDF5文件的唯一方法。

NetCDF和HDF-SDS描述符文件组件

数据描述文件是自由格式,这意味着每个记录record(文本行)的组成部分都是以空格分隔的,并且可以按任何顺序出现。在解析之前,将删除每个记录开头的前导空格。单个记录的长度不能超过255个字符。每条记录均以特定的条目名称开头,后跟多个参数或关键字,具体取决于条目。

用于NetCDF,HDF-SDS和HDF5文件的描述文件条目为:

条目 备注
DSET 指向文件的条目. 参见reference page
DTYPE 该条目应当是'netcdf' 和'hdfsds' 关键字。
(GrADS version 2.0.a7+)对于HDF5,使用'hdf5_grid'关键字
TITLE 在每个GrADS描述符文件中都包含一个描述性TITLE是一种良好的常规做法
UNDEF 此项指定未定义或缺测数据值。第二个参数(可选)是SDF中包含未定义值的属性的名称。当数据文件中的各个变量具有不同的未定义值时,应使用此方法。数据I / O之后,网格中的缺失值将从变量undef转换为整个文件范围的undef(UNDEF记录的第一个参数中的数值)。然后,对GrADS来说,所有变量都具有相同的undef值,即使它们不在SDF中也是如此。属性名称区分大小写,并且假定SDF中所有变量的名称都相同。如果给定的名称与任何属性都不匹配,或者没有给定名称,则将使用文件范围的undef值。
例如: UNDEF -9.99e8 _FillValue
UNPACK 该条目用于’打包’的数据变量——即非浮点数据需要通过以下方程转换成浮点数:
y = x * scale_factor + add_offset
仅仅需要scale_factor的属性名。如果你的SDF文件没有一个offset 属性,第二个参数可以被忽略,offset会分配成默认值0.0。属性名区分大小写,并且假定netcdf或hdfsds数据文件中所有变量的名称都相同。如果给定的名称不匹配任何属性,则scale_factor将被分配为1.0,offset将被分配为0.0。打包数据的转换是在应用undef测试之后完成的。 例子:
UNPACK scale_factor add_offset
UNPACK Slope Intercept
OPTIONS 合理的关键字有'yrev', 'zrev', 'template', 和 '365_day_calendar'。
CACHESIZE (GrADS version 2.0.a8+) 该条目将覆盖用于读取HDF5或NetCDF4文件的缓存的默认大小。它与其他数据类型无关。除非数据文件具有特别大的块,否则不必显式设置缓存大小。请参阅有关compression的文档。
PDEF (GrADS version 1.9b4+) 该功能用于,SDF包含非经纬度的本地投影上的数据(例如兰伯特共形或极坐标立体网格)时。有关更多信息,请参见PDEF documentation
XDEF 这些条目用于描述SDF中的坐标维数。语法与二进制文件相同。有关更多详细信息,请参见reference page。您可以将ncdump的输出与-c选项一起使用,以获取有关SDF中坐标尺寸的信息。
YDEF
ZDEF
TDEF
EDEF
VECTORPAIRS 此项用于显式标识向量分量对。仅当数据位于经纬度以外的本地投影上(即您正在使用PDEF)并且风必须从相对网格方向旋转 旋转到相对地球方向时,才需要VECTORPAIRS条目。(GrADS必须同时检索u和v分量才能进行旋转计算。) 参数是U分量和V分量变量名,用逗号分隔,没有空格。可能会列出一对以上的组件;在这种情况下,两对之间应以空格隔开。 例子:
VECTORPAIRS  u,v  u10,v10  uflx,vflx
VARS SDF描述符文件中的变量声明具有一些特殊功能,如下所述。不必为SDF中的所有变量都包括变量声明,只需为希望使用GrADS读取的变量声明变量即可。 varname字段有以下语法:
through SDF_name=>grads_name
ENDVARS SDF_name必须与SDF中的数据变量名称完全匹配——它可以包含大写字母和非字母数字字符。grads_name 是SDF_name的别名,并且必须少于16个字符,以字母字符开头,并且不能包含任何大写字母或非字母数字字符。如果SDF_name已经满足上面列出的GrADS变量名的条件,则可以省略变量名的别名(即,"SDF_name=>"不位于grads_name之前)。对于dtype hdf5_grid,SDF_name必须包含数据集所属的所有嵌套组的名称(用”/”分隔)(请参见下面的示例)。 levs字段是一个整数,用于指定变量包含的垂直级别的数量。没有Z维度的变量的levs值应为0。没有Z维度的变量的levs值应等于ZDEF语句中指定的znum值。 units字段是变量大小变化的逗号分隔列表。尺寸用x,y,z,t和e表示,并对应于XDEF,YDEF,ZDEF,TDEF和EDEF定义的五个轴。units字段中列出的维度顺序很重要-它必须描述变量的形状,该变量被写入SDF数据文件。对于NetCDF文件,此信息显示在ncdump的输出中,变量名旁边。对于HDF5文件,此信息作为变量的数据空间出现在h5dump的输出中。 例子:
Height=>hgt   17   t,z,y,x   Geopotential Height (m)
/HDFEOS/GRIDS/ColumnAmountNO2/Data~Fields/CloudFraction=>cf  15  z,y,x  Cloud Fraction

使用说明

  1. GrADS当前处理的NetCDF数据类型为short,long和float。处理的HDF-SDS数据类型为8位整数(int8和uint8),短整数(int16和uint16),整数(int32和uint32)和浮点数。I / O完成后,这些都将转换为float类型。
  2. 如果满足以下条件,则 sdfopen/xdfopen接口将自动处理解压缩NetCDF数据:

    a. 打包数据类型为"short"

    b. 用于转换的常量的数据类型是"float"

    c. 属性名称是"scale_factor"或"slope",以及"add_offset"或" intercept"

    如果SDF中的打包数据不符合此描述,则必须将open命令与完整的描述符\文件一起使用,并在UNPACK条目中提供属性名称。在这种情况下,属性数据类型可以为short,long,float或double。
  3. 如果SDF中的数据不是浮点数,并且需要使用UNPACK条目中命名的属性进行转换,则GrADS假定变量undef值对应于文件中出现的数据值,即,在使用scale factor(比例因子)和offset(偏移量)之前。打包数据的缺测值被分配了文件如果您的数据文件包含一个在非世界坐标维度(non-world-coordinate)上变化的变量(例如,直方图间隔,光谱带,集合数),则可以将非负整数放入变化维度的列表中,该列表将成为额外的维度。例如:范围的undef值,并且永不解压。
  4. 如果您的数据文件包含一个在非世界坐标维度上变化的变量(例如,直方图间隔,谱带,集合数),则可以将非负整数放入变化维度的列表中,该列表将成为额外的维度。例如:

    VAR=>hist0 0 0,y,x First historgram interval for VAR

    VAR=>hist1 0 1,y,x Second historgram interval for VAR

    VAR=>hist2 0 2,y,x Third histogram interval for VAR

    此示例中的另一个选项是用直方图间隔填充未使用的Z轴:

    ZDEF 3 linear 1 1

    ...

    VAR=>hist 3 z,y,x VAR Histogram

    在这种情况下,对于GrADS来说,变量"hist"的Z值会发生变化,但是用户必须记住,Z值对应于直方图间隔而不是气压层次。后一种技术可以更轻松地分割数据,但不是最准确的表示形式。而且,如果您没有可用的未使用的世界坐标轴(unsued world-coordinate axis),那么您仍然可以使用一种方法来访问数据变量的所有维度。
  5. 某些SDF的坐标维度远远超过四个,例如,交错的经度轴和纬度轴。在这种情况下,很可能在同一SDF中包含的不同网格上定义了变量。对于每个数据文件,GrADS只能处理一个4D网格-描述文件中列出的所有SDF变量必须共享相同的坐标轴。必须编写多个描述文件来描述在不同网格上定义的变量。

例子

  1. 这是ncdump中包含海洋模型输出的文件的示例输出。该文件包含八个坐标维和九个数据变量,它们在坐标轴的不同组合上定义。需要五个单独的描述符文件来描述所有变量:一个用于速度分量u和v,另一个用于速度分量w,第三个用于位温,第四个用于风应力分量taux和tauy,第五个用于表面变量hflx,sflx和eta
  2. 天气研究和预报(WRF)模型可以在非纬度/经度网格上生成NetCDF输出。GrADS可以使用带有PDEF条目的完整描述符文件以其原始格式读取这些文件。要提取PDEF条目的参数,可以使用描述原始网格参数的全局属性值,以及提供网格点经度/纬度值的数据变量。WRF模型使用交错网格,就像上面示例中的海洋模型一样。为了清楚起见,已对该WRF ncdump输出进行了编辑,以仅显示与示例描述文件中使用的数据变量相关的四个坐标轴。实际输出文件中还有许多其他数据变量和坐标维。首先,这是一个示例描述文件,用于获取本地网格点的经度和纬度值——请注意,不包括PDEF语句,XDEF和YDEF语句不映射至经度和纬度,它们仅用作抽象网格增量。这些网格点中的任何一个都可用作PDEF条目中的参考点,此示例使用值为(-125.898,26.9628)的网格点(1,1)。最后,这是四个数据变量的描述文件。WRF模型是高度可配置的,并且也在积极开发中,因此此示例仅应用作指导。

    wrf示例ctl文件
dset ^wrf_sample.nc
dtype netcdf
undef -888
TITLE WRF Output Grid: Time, bottom_top, south_north, west_east
pdef 249 249 lcc 26.9628 -125.898 1 1 36.2999 36.2999 -116.0 8000 8000
xdef 270 linear -129 0.1
ydef 200 linear 26 0.1
zdef 25 linear 1 1
tdef 2 linear 11jun2002 3hr
vars 4
P=>p 25 t,z,y,x Pressure
T=>t 25 t,z,y,x perturbation potential temperature (theta-t0)
HGT=>hgt 0 t,y,x terrain height
T2=>t2 0 t,y,x temperature at 2m
endvars

译者注: GrADS 2.2.1版本不能正常读取HDF5格式的GPM IMERG数据,这个问题会在下一版本2.2.2解决. [gradsusr] GPM HDF5 descriptor file

GrADS 读取NetCDF和HDF的ctl文件 SDF文件的描述文件的更多相关文章

  1. ios开发证书,描述文件,bundle ID的关系

    苹果为了控制应用的开发与发布流程,制定了一套非常复杂的机制.这里面的关键词有:个人开发者账号,企业开发者账号,bundle ID,开发证书,发布证书(又叫"生产证书"),开发描述文 ...

  2. 【转】ios开发证书,描述文件,bundle ID的关系

    ios开发证书,描述文件,bundle ID的关系   苹果为了控制应用的开发与发布流程,制定了一套非常复杂的机制.这里面的关键词有:个人开发者账号,企业开发者账号,bundle ID,开发证书,发布 ...

  3. iOS开发 - 超级签名实现之描述文件

    简介 因为最近企业签掉得太严重了,上头要求实现超级签进行游戏下载.故有了此文章,记录一下过程. 签名原理其实很简单,超级签名的技术就是使用个人开发者账号,将用户的设备当作开发设备进行应用分发.这也导致 ...

  4. php 读取网页源码 , 导出成txt文件, 读取xls,读取文件夹下的所有文件的文件名

    <?php // 读取网页源码$curl = curl_init();curl_setopt($curl, CURLOPT_URL, $url);curl_setopt($curl, CURLO ...

  5. C++读取文件夹中所有的文件或者是特定后缀的文件

    由于经常有读取一个文件夹中的很多随机编号的文件,很多时候需要读取某些特定格式的所有文件. 下面的代码可以读取指定文件家中的所有文件和文件夹中格式为jpg的文件 参考: http://www.2cto. ...

  6. java读取某个文件夹下的所有文件

    import java.io.FileNotFoundException;import java.io.IOException;import java.io.File; public class Re ...

  7. 创建一个目录info,并在目录中创建一个文件test.txt,把该文件的信息读取出来,并显示出来

    /*4.创建一个目录info,并在目录中创建一个文件test.txt,把该文件的信息读取出来,并显示出来*/ #import <Foundation/Foundation.h>#defin ...

  8. PHP文件操作,多行句子的读取,file()函数,file_get_contents()函数,file_put_contents()函数,is_file,统计网站pv (访问量),文件的复制 copy,文件重命名 rename,删除文件 unlink

    php中添加utf-8: header("Content-type:text/html;charset='UTF-8'"); 文件操作步骤: 1.在同一目录下建立一个file.tx ...

  9. 读取指定文件夹下的全部文件,可通过正则进行过滤,返回文件路径数组 -- 基于node的一个函数

    var fs = require('fs'); // 模板文件夹路径 var templateDirectory = '../src'; //相对于当前文件的相对路径 //var templateDi ...

  10. node 读取多个文件、合并多个文件、读写多个文件

    一.读取文件 1.找文件中匹配的内容 let fs = require('fs') let content = fs.readFileSync('/Users/**/desktop/Test.txt' ...

随机推荐

  1. 内容分发网络 CDN

    介绍 CDN 内容分发网络(英语:Content Delivery Network 或 Content Distribution Network,缩写:CDN)是建立并覆盖在承载网上,由不同区域的服务 ...

  2. js中各种函数

    //设置不可使用 $("#sydcpihao_"+sysTime).attr('disabled',true); //设置标签中的text $("#sydcdel_&qu ...

  3. javaSE学习三

    数组 /*数组的基本特点一.其长度是确定的.数组-旦被创建,它的大小就是不可以改变的.二.其元素必须是相同类型,不允许出现混合类型.三.数组中的元素可以是任何数据类型,包括基本类型和引用类型.四.数组 ...

  4. 学习笔记3:Android Studio 配置NDK编译c++代码

    NDK编译c++代码有两个方式: 1  ndk-build.cmd + Android.mk + Application.mk 编译, 可单独用ndk编译, 不使用IDE,使用Android需要配置b ...

  5. Matplotlib 网格线

    我们可以使用 pyplot 中的 grid() 方法来设置图表中的网格线. grid() 方法语法格式如下: matplotlib.pyplot.grid(b=None, which='major', ...

  6. grafana嵌入iframe,去除菜单和上方工具条

    1.首先修改grafana的配置:etc/grafana/grafana.ini,修改下面这两个配置为true 2.由于项目使用了nginx,要启用https,需要修改下面这几个配置:(不需要启用ht ...

  7. C++ STL中的二分法

    二分法介绍 狭义的二分法是一种在有序的数组中查找是否存在某个值的算法.广义的二分法不一定需要显式的数组,只需要有序的解空间即可.(此处解空间借用线性代数的称谓,仅表示所有合法解的集合,与线性代数无关) ...

  8. Codeforces 1228A、Distinct Digits

    原题 原题网址 题目大意 给定一个区间(上下界都是整数),判断该区间内是否存在一个整数的数字两两不同. 数据结构 一个数组flag,记录0-9是否出现过. 思路 外层循环枚举该区间内所有整数. 首先初 ...

  9. Property or method "scope" is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components

    报错如下 属性或方法"范围"不是在实例上定义的,而是在呈现期间引用的. 通过初始化属性,确保此属性是反应性的,无论是在数据选项中,还是对于基于类的组件. 原因在template中未 ...

  10. Visualization: Pie Chart(可视化:饼图)

    1 <html> 2 <head> 3 <script type="text/javascript" src="https://www.gs ...