参考:I/O - NetCDF Routines —— NetCDF 操作函数
01 | NCDF_OPEN | 打开一个 NetCDF 文件。 | |
02 | NCDF_CLOSE | 关闭一个 NetCDF 文件。 | |
03 | NCDF_VARID | 返回一个变量 ID,varid。 | |
04 | NCDF_VARGET | 读取一个变量。 | |
05 | NCDF_ATTGET | 读取一个属性。 | |
06 | NCDF_ATTINQ | 返回一个关于 NetCDF 属性信息的结构体。 | |
07 | NCDF_ATTRENAME | 属性重命名。 | |
08 | NCDF_VARINQ | 返回变量信息。 | |
09 | NCDF_INQUIRE | 返回文件信息。 | |
10 | NCDF_ATTNAME | 返回一个属性名称。 | |
11 | NCDF_CREATE | 创建一个 NetCDF 文件。 | |
12 | NCDF_DIMDEF | 创建一个维度。 | |
13 | NCDF_VARDEF | 创建一个变量。 | |
14 | NCDF_ATTPUT | 写入属性数据。 | |
15 | NCDF_CONTROL | 开始或结束定义模式。 | |
16 | NCDF_VARPUT | 写入变量数据。 |
NetCDF(network Common Data Form)由位于科罗拉多州波尔市的 Unidata 程序中心开发,主要应用于大气科学的研究。NetCDF 的数据模式具有简单性和灵活性的特点。NetCDF 文件的基本组成为变量、属性和维数:
- 变量为标量或多维数组。NetCDF 所支持的 IDL 数据类型有 string、byte、int、long、float 和 double
- 属性包含一个变量或这个文件的附加性质。包含变量信息(如单位、有效范围、尺度因子等)的属性称作变量属性;包含文件信息的属性称作全局属性。属性可以是标量或一维数组,支持的数据类型为 string、byte、int、long、float 和 double
- 维数为长整形标量,记录了一个或多个变量的大小
参考:NetCDF 格式文件入门
参考:NetCDF 入门
从数学上来说,NetCDF 存储的数据就是一个多自变量的单值函数。 用公式来说就是 f(x,y,z,...) = value,函数的自变量 x,y,z 等在 NetCDF 中叫做维 (dimension) 或坐标轴 (axis),函数值 value 在 NetCDF 中叫做变量 (Variables)。而自变量和函数值在物理学上的一些性质,比如计量单位 (量纲)、物理学名称等等在 NetCDF 中就叫属性 (Attributes)。
注意:IDL读取数据与在其他软件上显示的数据位置相反,左上对右下!
注意:NetCDF记录数据与实际数据是通过一个数量关系获取的,如下图所示:
实际结果 = 显示结果 × scale_factor + add_offset |
数据:可以从 http://www.gumley.com 中下载这些例子的数据文件:
- image.nc
- sao.nc
常用的 NetCDF 程序
名 称 | 功 能 | 名 称 | 功 能 |
NCDF_OPEN() | 打开一个 NetCDF 文件 | NCDF_ATTNAME() | 返回一个属性名称 |
NCDF_CLOSE | 关闭一个 NetCDF 文件 | NCDF_CREATE() | 创建一个 NetCDF 文件 |
NCDF_VARID() | 返回一个变量标识符 | NCDF_DIMDEF() | 创建一个维度 |
NCDF_VARGET | 读取一个变量 | NCDF_VARDEF() | 创建一个变量 |
NCDF_ATTGET | 读取一个属性 | NCDF_ATTPUT | 写入属性数据 |
NCDF_INQUIRE() | 返回文件信息 | NCDF_CONTROL | 开始或结束定义模式 |
NCDF_VARINQ() | 返回变量信息 | NCDF_VARPUT | 写入变量数据 |
常用的标准 NetCDF 文件属性
属性名称 | 定 义 |
long_name | 详细描述变量的字符串(如“Northwards velocity component”) |
units | 描述变量单位的字符串(如“meters/second”) |
valid_range | 一个两元素的数组,包含变量有效的最小和最大值(如 [0.0, 5.0]), 该属性的类型必须和变量类型一致 |
scale_factor | 变量读取以后作用于变量的一个乘数(允许 float 值存在 short 或 byte 类型), 该属性的类型必须和需要的变量类型一致(如浮点型) |
add_offset | 变量读取完毕,并且 scale_factor 使用后,加入到变量的一个偏值, 该属性的类型必须和需要的变量类型一致(如浮点型) |
FillValue | 表示没有数据写入的一个值,该属性的类型必须和变量的类型一致 |
序号 | 名称 |
功能说明 |
语法 & 举例 | ||
01 | NCDF_OPEN |
打开一个 NetCDF 文件,返回值是这个文件的 NetCDF ID 值。 |
|
offset = [80, 20] count = [70, 70] stride = [2, 3] ;打开 NetCDF 文件 id = NCDF_OPEN('dave.nc') ;获取 image 的变量 ID image = NCDF_VARID(id, 'image') ;获取 image 数据内容 NCDF_VARGET, id, image, fullimage ;获取 image 部分数据内容 NCDF_VARGET, id, image, subimage, COUNT=count, STRIDE=stride, OFFSET=offset ;关闭 NetCDF 文件 NCDF_CLOSE, id |
|
02 | NCDF_CLOSE |
|
关闭一个 NetCDF 文件。 |
||
03 | NCDF_VARID |
返回一个变量 ID,varid。 |
|||
04 | NCDF_VARGET |
读取一个变量。 |
|||
05 | NCDF_ATTGET |
读取一个属性。 |
;打开一个新的 NetCDF 文件 id = NCDF_CREATE('test.nc', /CLOBBER) ;创建两个全局属性 TITLE 和 DATE NCDF_ATTPUT, id, /GLOBAL, 'TITLE', 'MY TITLE' NCDF_ATTPUT, id, /GLOBAL, 'DAY', 'July 1,1996' ; ATTRENAME 可以用来给属性重命名 NCDF_ATTRENAME, id, 'DAY', 'DATE', /GLOBAL ;获取第二个属性的名称 name = NCDF_ATTNAME(id, /GLOBAL, 1) ;获取属性值 NCDF_ATTGET, id, /GLOBAL, name, date ;获取这个属性的信息 result = NCDF_ATTINQ(id, /GLOBAL, name) HELP, name, date, result, /STRUCTURE PRINT, date PRINT, STRING(date) NCDF_CLOSE, id |
||
06 | NCDF_ATTINQ |
返回一个关于 NetCDF 属性信息的结构体。 |
|||
07 | NCDF_ATTRENAME |
属性重命名。 |
|||
08 | NCDF_VARINQ |
返回变量信息。 |
id = NCDF_OPEN('test.nc') INQ_VID = NCDF_VARINQ(id, 'dist_image') HELP, INQ_VID, /STRUCTURE file_inq = NCDF_INQUIRE(id) HELP, file_inq, /STRUCTURE NCDF_CLOSE, id |
||
09 | NCDF_INQUIRE |
返回文件信息。 |
|||
10 | NCDF_ATTNAME |
返回一个属性名称。
|
|||
11 | NCDF_CREATE |
创建一个 NetCDF 文件。 |
|
;打开一个新的 NetCDF 文件,如果文件存在,直接将其毁掉 id = NCDF_CREATE('test.nc', /CLOBBER) ;写入属性数据 NCDF_ATTPUT, id, 'TITLE', 'Incredibly Important Data', |
|
12 | NCDF_DIMDEF |
创建一个维度。 |
|||
13 | NCDF_VARDEF |
创建一个变量。 |
|||
14 | NCDF_ATTPUT |
写入属性数据。 |
|||
15 | NCDF_CONTROL |
开始或结束定义模式。 |
|
||
16 | NCDF_VARPUT |
写入变量数据。 :是在每维中提取的间隔,默认为 [0, 0, ... , 0],意味着每个元素均被选中 |
|||
|