224?? IDL NetCDF 文件操作说明

Posted alex_bn_lee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了224?? IDL NetCDF 文件操作说明相关的知识,希望对你有一定的参考价值。

参考: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 值。
----------------------------------------------------------------------------------

Result = NCDF_OPEN( Filename [, /NOWRITE | , /WRITE] )
----------------------------------------------------------------------------------
Filename:欲打开或创建的文件路径
NOWRITE:只读模式,默认模式
WRITE:读写模式

    

 

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 文件。
----------------------------------------------------------------------------------
NCDF_CLOSE, Cdfid
----------------------------------------------------------------------------------
Cdfid由 NCDF_OPEN 或 NCDF_CREATE 返回的 NCDF ID 值

 03 NCDF_VARID  

返回一个变量 ID,varid。
如果返回值为 -1 说明变量不存在。
----------------------------------------------------------------------------------
Result = NCDF_VARID(Cdfid, Name)
----------------------------------------------------------------------------------
Cdfid:由 NCDF_OPEN 或 NCDF_CREATE 返回的 NCDF ID 值
Name:变量名称

 04 NCDF_VARGET  

读取一个变量。
----------------------------------------------------------------------------------
NCDF_VARGET, Cdfid, Varid, Value [, COUNT=vector] [, OFFSET=vector] [, STRIDE=vector]
----------------------------------------------------------------------------------
Cdfid由 NCDF_OPEN 或 NCDF_CREATE 返回的 NCDF ID 值
Varid是 NCDF_VARID 函数获取的返回值 varid
Value是读取变量的结果
COUNT=vector是每维中读取元素的数目,默认情况是从当前 offset 的位置到每维的最后一个元素
OFFSET=vector是每维中读取的第一个元素,从零开始,默认为 [0, 0, ... ,0]
STRIDE=vector是在每维中提取的间隔,默认为 [0, 0, ... , 0],意味着每个元素均被选中
----------------------------------------------------------------------------------

注意:如果 offset、count 或 stride 导致变量超出了范围,则 IDL 在读取时将舍去超出的部分,并给出错误信息。

 05 NCDF_ATTGET  

读取一个属性。
----------------------------------------------------------------------------------
NCDF_ATTGET, Cdfid [, Varid] , Name, Value [, /GLOBAL]
----------------------------------------------------------------------------------
Cdfid由 NCDF_OPEN 或 NCDF_CREATE 返回的 NCDF ID 值
Varid:是 NCDF_VARID 函数获取的返回值 varid

Name:是包含属性名称的字符串
Value:获取变量结果
GLOBAL:返回全局变量结果

 

 

;打开一个新的 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 属性信息的结构体。
----------------------------------------------------------------------------------
Result = NCDF_ATTINQ( Cdfid [, Varid] , Name [, /GLOBAL])
----------------------------------------------------------------------------------
Cdfid由 NCDF_OPEN 或 NCDF_CREATE 返回的 NCDF ID 值
Varid:是 NCDF_VARID 函数获取的返回值 varid
Name:是包含属性名称的字符串
GLOBAL:返回全局变量结果

 07 NCDF_ATTRENAME  

属性重命名。
----------------------------------------------------------------------------------
NCDF_ATTRENAME, Cdfid [, Varid] Oldname, Newname [, /GLOBAL]
----------------------------------------------------------------------------------
Cdfid:由 NCDF_OPEN 或 NCDF_CREATE 返回的 NCDF ID 值
Varid:是 NCDF_VARID 函数获取的返回值 varid
Oldname:属性的当前名称
Newname:属性的新名称
将netcdf数据最终转换为envi的标准格式或者tif格式。用matlab或者idl可以吗?

NetCDF 4.5 NetCDF 文件版本 4 的 Java 问题 + HDF 的旧代码不起作用

在 python 中处理非常大的 netCDF 文件

[Errno -101] NetCDF:打开 netcdf 文件时出现 HDF 错误

将 netCDF 文件显示到 Google 地图

如何将 GeoDataFrame 存储到 NetCDF 文件

(c)2006-2024 SYSTEM All Rights Reserved IT常识