爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 14898|回复: 24

[分享资料] IDL读取nc文件的代码

[复制链接]

新浪微博达人勋

发表于 2015-8-10 16:40:00 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
这是我自己用的IDL读取nc文件的代码,分享给大家,再跟大家讨论下其中的一些问题。
pro readncHGT
cdfid=ncdf_open('d:/data/ncep/hgt.mon.mean.nc',/nowrite)
data=make_array(144,73,17,810,/float)
varid=ncdf_varid(cdfid,'hgt')               ;与grads的ctl里看到的变量名一致
ncdf_varget,cdfid,varid,data

ncdf_attget,cdfid,varid,'scale_factor',a   ;系数
ncdf_attget,cdfid,varid,'add_offset',b      ;偏值
ncdf_close,cdfid

hgtdata=fltarr(144,73,17,810)     ;设置一个新变量
hgtdata=reverse(data,2)*a+b     ;先南北反转,再乘加系数
end


经过这一步后,hgtdata就成功的获取到了hgt的所有数据。
其中,需要reverse这一步,2表示将第二维进行反转操作,因为IDL读到的顺序跟nc文件存储的不一样,这个有点费解。
第二个问题是系数和偏值的问题。有不少文章解释,直接读取到的值,需要乘以系数和偏值,才能作为真实值。但我在读一些nc文件时,只有在读取hgt.mon.mean.nc文件时,才能读出这个系数和偏值,而且系数a=1,偏值=0,也就意味着读出来的值就是正常值。而读air气温数据、uwnd、vwnd时,会出现错误提示:
% NCDF_ATTGET: Attribute inquiry failed, name "scale_factor" not found.
% NCDF_ATTGET: Attribute read failed, name "scale_factor" not found.
% NCDF_ATTGET: Attribute inquiry failed, name "add_offset" not found.
% NCDF_ATTGET: Attribute read failed, name "add_offset" not found.
此时,a和b会变成随机数组,经常是4个长度的随机数组,这样再与data相乘,就会出现可怕的灾难,所有数据瞬间变成长度只有4的数组了......所以最好先调试下看,自己的nc文件是否能正常读出系数和偏值,再进行纠正,否则,会出现意想不到的问题。

经过检验,原值与用grads绘制出来的图形完全一样。

IDL我也不是很熟,抛砖引玉,看看大家有什么看法
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-8-17 20:11:26 | 显示全部楼层
hanhao谢谢啊!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-10-22 00:21:59 | 显示全部楼层
最近也在用IDL打开文件,我的nc文件里都能读出系数和偏值,但还未对结果进行合理性检验。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-10-22 00:23:02 | 显示全部楼层
hgtdata=reverse(data,2)*a+b     ;先南北反转,再乘加系数这步还是费解,楼主能否解释下...
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-10-24 10:11:36 | 显示全部楼层
云南小黑哥 发表于 2015-10-22 00:23
hgtdata=reverse(data,2)*a+b     ;先南北反转,再乘加系数这步还是费解,楼主能否解释下...

不同的数据,从南到北或者是从北到南的排列是不确定的,如果直接读取经纬度信息来确定数据由南到北还是由北到南是没问题的,但如果习惯由南往北排列,有的时候,就需要南北翻转下。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-11-11 15:21:48 | 显示全部楼层
现在就一个语句, ncread
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-11-11 15:25:05 | 显示全部楼层
可以用那个欧洲什么气象中心的那个气象包吧,里面有做好的读取nc文件的函数。那个挺好的。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-11-19 20:55:12 | 显示全部楼层
cbsdly792 发表于 2015-11-11 15:21
现在就一个语句, ncread

ncread?哪个版本的啊?我IDL8.3还没这个函数呢
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-12-8 10:40:44 | 显示全部楼层
ncid是哪个版本
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-12-22 18:54:25 | 显示全部楼层
楼主,谢谢!
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表