参考: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:读写模式

  1. offset = [80, 20]
  2. count = [70, 70]
  3. stride = [2, 3]
  4.  
  5. ;打开 NetCDF 文件
  6. id = NCDF_OPEN('dave.nc')
  7.  
  8. ;获取 image 的变量 ID
  9. image = NCDF_VARID(id, 'image')
  10.  
  11. ;获取 image 数据内容
  12. NCDF_VARGET, id, image, fullimage
  13.  
  14. ;获取 image 部分数据内容
  15. NCDF_VARGET, id, image, subimage, COUNT=count,
  16. STRIDE=stride, OFFSET=offset
  17.  
  18. ;关闭 NetCDF 文件
  19. 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:返回全局变量结果

 
  1. ;打开一个新的 NetCDF 文件
  2. id = NCDF_CREATE('test.nc', /CLOBBER)
  3.  
  4. ;创建两个全局属性 TITLE DATE
  5. NCDF_ATTPUT, id, /GLOBAL, 'TITLE', 'MY TITLE'
  6. NCDF_ATTPUT, id, /GLOBAL, 'DAY', 'July 1,1996'
  7.  
  8. ; ATTRENAME 可以用来给属性重命名
  9. NCDF_ATTRENAME, id, 'DAY', 'DATE', /GLOBAL
  10.  
  11. ;获取第二个属性的名称
  12. name = NCDF_ATTNAME(id, /GLOBAL, 1)
  13.  
  14. ;获取属性值
  15. NCDF_ATTGET, id, /GLOBAL, name, date
  16.  
  17. ;获取这个属性的信息
  18. result = NCDF_ATTINQ(id, /GLOBAL, name)
  19. HELP, name, date, result, /STRUCTURE
  20. PRINT, date
  21. PRINT, STRING(date)
  22.  
  23. 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:属性的新名称
◈ GLOBAL:返回全局变量结果

 08 NCDF_VARINQ  

返回变量信息。
返回值是一个结构体,{ NAME:"", DATATYPE:"", NDIMS:0L, NATTS:0L, DIM:LONARR(NDIMS) }
◈ Name:变量的名称
◈ DataType:变量数据类型,'BYTE', 'CHAR', 'INT', 'LONG', 'FLOAT', or 'DOUBLE'
◈ Ndims:维度的数目
◈ Natts:给这个变量分配属性的数目
◈ Dim:变量维度 ID 的数组
----------------------------------------------------------------------------------
Result = NCDF_VARINQ(Cdfid, Varid)
----------------------------------------------------------------------------------
◈ Cdfid:由 NCDF_OPEN 或 NCDF_CREATE 返回的 NCDF ID 值
◈ Varid:是 NCDF_VARID 函数获取的返回值 varid

   
  1. id = NCDF_OPEN('test.nc')
  2.  
  3. INQ_VID = NCDF_VARINQ(id, 'dist_image')
  4. HELP, INQ_VID, /STRUCTURE
  5.  
  6. file_inq = NCDF_INQUIRE(id)
  7. HELP, file_inq, /STRUCTURE
  8.  
  9. NCDF_CLOSE, id
09 NCDF_INQUIRE  

返回文件信息。
返回值是一个结构体,{ NDIMS:0L, NVARS:0L, NGATTS:0L, RECDIM:0L }
◈ Ndims:这个 NetCDF 文件定义维度的数目
◈ Nvars:这个 NetCDF 文件定义变量的数目
◈ Ngatts:这个 NetCDF 文件定义全局属性的数目
----------------------------------------------------------------------------------
Result = NCDF_INQUIRE(Cdfid)
----------------------------------------------------------------------------------
◈ Cdfid:由 NCDF_OPEN 或 NCDF_CREATE 返回的 NCDF ID 值

 10 NCDF_ATTNAME  

返回一个属性名称。
返回属性名称,如果没有,就返回空。
----------------------------------------------------------------------------------
Result = NCDF_ATTNAME( Cdfid [, Varid] , Attnum [, /GLOBAL])
----------------------------------------------------------------------------------
◈ Cdfid:由 NCDF_OPEN 或 NCDF_CREATE 返回的 NCDF ID 值
◈ Varid:是 NCDF_VARID 函数获取的返回值 varid
◈ Attnum:属性的索引值,通过 NCDF_VARINQ(从0~属性总数-1) 或 NCDF_INQUIRE (全局属性,从0~属性总数-1)获取
◈ GLOBAL:返回全局变量结果

11 NCDF_CREATE  

创建一个 NetCDF 文件。
创建成功的话就会返回 NetCDF ID 值。文件自动转入定义模式(define mode),意味着新的变量、属性和维度可以加入文件中。
----------------------------------------------------------------------------------
Result = NCDF_CREATE( Filename [, /CLOBBER | /NOCLOBBER] [, /NETCDF3_64BIT] [, /NETCDF4_FORMAT] )
----------------------------------------------------------------------------------
◈ Filename:欲创建的文件名称
◈ CLOBBER:设置此关键字,并且文件存在,那么在创建新的版本之前直接擦除文件内容
◈ NOCLOBBER:设置此关键字,只有不存在此文件的情况下才能创建成功,否则报错

  1. ;打开一个新的 NetCDF 文件,如果文件存在,直接将其毁掉
  2. id = NCDF_CREATE('test.nc', /CLOBBER)
  3.  
  4. ;写入属性数据
  5. NCDF_ATTPUT, id, 'TITLE', 'Incredibly Important Data',
    /GLOBAL
  6. NCDF_ATTPUT, id, 'GALAXY', 'Milky Way', /GLOBAL
  7. NCDF_ATTPUT, id, 'PLANET', 'Earth', /GLOBAL
  8.  
  9. ; Define the X dimension.
  10. xid = NCDF_DIMDEF(id, 'x', 100)
  11. ; Define the Y dimension.
  12. yid = NCDF_DIMDEF(id, 'y', 200)
  13. ; Define the Z dimension.
  14. zid = NCDF_DIMDEF(id, 'z', /UNLIMITED)
  15.  
  16. ;创建变量
  17. vid0 = NCDF_VARDEF(id, 'image0', [yid, xid], /FLOAT)
  18. vid1 = NCDF_VARDEF(id, 'image1', [yid, xid], /FLOAT)
  19.  
  20. NCDF_CLOSE, id
12 NCDF_DIMDEF  

创建一个维度。
如果成功,返回维度的 ID 值。
----------------------------------------------------------------------------------
Result = NCDF_DIMDEF( Cdfid, DimName, Size [, /UNLIMITED] )
----------------------------------------------------------------------------------
◈ Cdfid:由 NCDF_OPEN 或 NCDF_CREATE 返回的 NCDF ID 值
◈ DimName:被定义维度的字符串名称
◈ Size:维度的大小。可以用任何数量的表达式来表达。如果使用了关键字 UNLIMITED,Size 相当于无效
◈ UNLIMITED:设置此关键字可以创建一个无限大小的维度

13 NCDF_VARDEF  

创建一个变量。
如果成功,返回变量的 ID 值,如果不能创建这个新的变量,就会返回-1。
----------------------------------------------------------------------------------
Result = NCDF_VARDEF( Cdfid, Name [, Dim] [, /BYTE | , /CHAR | , /DOUBLE | , /FLOAT | , /LONG | , /SHORT] [, CHUNK_DIMENSIONS] [, /CONTIGUOUS] [, GZIP=value] [, /SHUFFLE] [, /STRING] [, /UBYTE] [, /UINT64] [, /ULONG] [, /USHORT])
----------------------------------------------------------------------------------
◈ Cdfid:由 NCDF_OPEN 或 NCDF_CREATE 返回的 NCDF ID 值
◈ Name:变量名称
◈ Dim:包括变量维度的 dimension IDs。如果 ID 是无限大小的,那必须放在数组的最右面。如果没有设置 Dim,变量默认为一个标量。
◈ INT:数据为整型
◈ FLOAT:数据为浮点型
----------------------------------------------------------------------------------
注意:如果类型关键字没有数据,默认使用 FLOAT

14 NCDF_ATTPUT  

写入属性数据。
----------------------------------------------------------------------------------
NCDF_ATTPUT, Cdfid [, Varid] , Name , Value [, /GLOBAL] [, LENGTH=value] [, /BYTE | , /CHAR | , /DOUBLE | , /FLOAT | , /LONG | , /SHORT] [, /STRING] [, /UBYTE] [, /UINT64] [, /ULONG] [, / USHORT]
----------------------------------------------------------------------------------
◈ Cdfid:由 NCDF_OPEN 或 NCDF_CREATE 返回的 NCDF ID 值
◈ Varid:是 NCDF_VARID 函数获取的返回值 varid
◈ Name:属性的名称
◈ Value:属性的值
◈ GLOBAL:设置此关键字去创建全局属性
◈ LENGTH=value:值的长度
◈ FLOAT:数据为浮点型

15 NCDF_CONTROL  

开始或结束定义模式。
----------------------------------------------------------------------------------
NCDF_CONTROL, Cdfid [, /ABORT] [, /ENDEF] [, /FILL | , /NOFILL] [, /NOVERBOSE | , /VERBOSE] [, OLDFILL=variable] [, /REDEF] [, /SYNC]
----------------------------------------------------------------------------------
◈ 设置此关键字可以将一个打开的 NetCDF 文件结束定义模式(define mode),进入数据模式(data mode)文件只有在数据模式下才能写入变量
◈ Cdfid:由 NCDF_OPEN 或 NCDF_CREATE 返回的 NCDF ID 值
◈ ENDEF:将一个打开的文件结束 define mode,进入 data mode
◈ REDEF:将一个打开的文件进入 define mode

  
16 NCDF_VARPUT  

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

:是在每维中提取的间隔,默认为 [0, 0, ... , 0],意味着每个元素均被选中
:是在每维中提取的间隔,默认为 [0, 0, ... , 0],意味着每个元素均被选中:是在每维中提取的间隔,默认为 [0, 0, ... , 0],意味着每个元素均被选中:是在每维中提取的间隔,默认为 [0, 0, ... , 0],意味着每个元素均被选中:是在每维中提取的间隔,默认为 [0, 0, ... , 0],意味着每个元素均被选中

       

【224】◀▶ IDL NetCDF 文件操作说明的更多相关文章

  1. 【223】◀▶ IDL HDF 文件操作说明

    参考:I/O - HDF Routines —— HDF 操作函数 01   HDF_SD_START 打开一个 SDS 模式的 HDF 文件. 02   HDF_SD_END 关闭一个 SDS 模式 ...

  2. 【179】IDL 读写 NetCDF 文件

    NetCDF(network Common Data Form)由位于科罗拉多州波尔市的 Unidata 程序中心开发,主要应用于大气科学的研究.NetCDF 的数据模式具有简单性和灵活性的特点.Ne ...

  3. MeteoInfoLab脚本示例:创建netCDF文件(合并文件)

    在MeteoInfoLab中增加了创建netCDF文件并写入数据的功能,这里利用合并多个netCDF文件为一个新的netCDF文件为例.1.创建一个可写入的netCDF文件对象(下面用ncfile表示 ...

  4. 【215】◀▶ IDL 文件操作说明 (黑底)

    参考:I/O - General File Access Routines —— 基本文件操作函数 01   CD 修改当前的工作空间路径. 02   FILE_SEARCH 对文件名进行特定的查找. ...

  5. 【215】◀▶ IDL 文件操作说明

    参考:I/O - General File Access Routines —— 基本文件操作函数 01   CD 修改当前的工作空间路径. 02   FILE_SEARCH 对文件名进行特定的查找. ...

  6. C中文件操作说明

    r 以只读方式打开文件,该文件必须存在. r+ 以读/写方式打开文件,该文件必须存在. rb+ 以读/写方式打开一个二进制文件,只允许读/写数据. rt+ 以读/写方式打开一个文本文件,允许读和写. ...

  7. Python-气象-大气科学-可视化绘图系列(一)——利用xarray读取netCDF文件并画图(代码+示例)

    本文原创链接:https:////www.cnblogs.com/zhanling/p/12192978.html 1 import numpy as np import xarray as xr i ...

  8. 【181】IDL 代码从 Windows 转移到 Linux

    文件夹分隔符,Windows 是“/”,Linux 是“\”,按照程序,需要修改 通过 bash 运行 *.pro 文件,貌似只能运行没有参数的,有参数的需要写入到文件中 idl 的文件不能用大写字母 ...

  9. NetCDF 入门

    一.概述  NetCDF全称为network Common Data Format,中文译法为“网络通用数据格式”,对程序员来说,它和zip.jpeg.bmp文件格式类似,都是一种文件格式的标准.ne ...

随机推荐

  1. mysql 查询表索引的命令详解

    http://hi.baidu.com/wylinux/item/cbc458c2984381300831c651查看索引命令mysql> show index from tblname;mys ...

  2. Cocos2d-X中的粒子

    Cocos2d-x引擎提供了强大的type=cocos2d-x&url=/doc/cocos-docs-master/manual/framework/native/v3/particle-s ...

  3. eclipse的快捷键(常用)

    1. Ctrl+O 显示类中方法和属性的大纲,能快速定位类的方法和属性,在查找Bug时非常有用. 2. Ctrl+M 窗口最大化和还原,用户在窗口中进行操作时,总会觉得当前窗口小(尤其在编写代码时), ...

  4. “ 不确定 "限制值的使用

    前言 前篇文章解释了限制值的五种类型以及获取它们的方法.但是对于其中可能不确定的类型( 45类型 ),当限制值获取函数返回-1的时候,我们无法仅通过这个函数返回值-1来判断是限制值获取失败还是限制值是 ...

  5. 用EasyClient开源项目采集Windows摄像头/麦克风的音视频进行RTSP直播

    EasyClient是EasyDarwin开源流媒体团队开发的一款功能丰富的开源PC客户端项目,目前支持Windows.Android版本,后续将支持ios版本,其中Windows版本的EasyCli ...

  6. UI标签库专题四:JEECG智能开发平台 Upload(上传标签)

     1. Upload(上传标签) 1.1.  參数 属性名 类型 描写叙述 是否必须 默认值 id string 上传控件唯一标示 是 null name string 控件name 是 null ...

  7. 11、JavaScript 比较和逻辑运算符

  8. java.lang.ClassNotFoundException: Didn't find class "org.reactivestreams.Publisher" on path

    缺少jar包  reactive-streams-1.0.0.jar  和  reactive-streams-1.0.0-sources.jar 常用于  Rxjava 开发过程中 <?xml ...

  9. RTSP(Real Time Streaming Protocol)学习笔记 -- RFC2326

    Real Time Streaming Protocol (RTSP)  RTSP是用在娱乐或通讯中控制流媒体服务器的网络协议,它可以创建和控制两个端点之间的会话. Client发出一些命令来控制me ...

  10. ORACLE 表空间扩展

    最近公司在对即将上线的系统做数据迁移和压力测试,于是乎需要和 Oracle 经常的打交道.今天正好碰到了表空间的问题,记录下来以后备用.也是最近才学习到的,原来 Oracle 表空间也是有大小限制的, ...