nc文件的读取与处理

上传人:ji****72 文档编号:37524368 上传时间:2018-04-17 格式:DOCX 页数:15 大小:159.89KB
返回 下载 相关 举报
nc文件的读取与处理_第1页
第1页 / 共15页
nc文件的读取与处理_第2页
第2页 / 共15页
nc文件的读取与处理_第3页
第3页 / 共15页
nc文件的读取与处理_第4页
第4页 / 共15页
nc文件的读取与处理_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《nc文件的读取与处理》由会员分享,可在线阅读,更多相关《nc文件的读取与处理(15页珍藏版)》请在金锄头文库上搜索。

1、.nc.nc 文件的查看和处理文件的查看和处理2013-08-04 12:45 阅读:2,168 最近在学习冰后回弹模型 (http:/www.atmosp.physics.utoronto.ca/peltier/data.php),里面给出 的数据为 nc(netcdf)格式的,读取是个问题,在言深深的帮助下,成功读取, 在这里将其总结出来,以备后用也希望可以方便有用之人。 有两种方式可以进行读取: 1、Excel 的一个插件,NetCDF4Excel 可以完成相关的查看工作,需要的可以进 行下载(http:/ http:/ . 416233 还不行就把错误提示发上来啊,这样才能对症下药啊r

2、iver river 当前离线 积分 24285 贡献 精华 在线时间 小时 注册时间 2012-8-28 最后登录 1970-1-1 窥视卡 雷达卡 给自己设置一个个性的签名吧 点击前往GrADS官网新地址回复 支持 反对 使用道具 举报 显身卡duan2008 duan2008 当前离线 板凳 楼主| 发表于 2012-11-30 20:30:14 | 只看该作者 |取消关注该作者的回复 river 发表于 2012-11-30 20:11 登录/注册后可看大图reinit sdfopen D:TDDOWNLOADhgt.1981.nc sdfopen D:TDDOWNLOADhgt.19

3、82.nc谢谢啊,还是不行。错误如下 登录/注册后可看大图 1.JPG (23.67 KB, 下载次数: 0) 下载附件 保存到相册 2012-11-30 20:27 上传登录/注册后可看大图 2.JPG (26.74 KB, 下载次数: 0) 下载附件 保存到相册 2012-11-30 20:29 上传我在想是时间的设置问题吗?因为第一个T=1是1981年 1月1日,而第二个文件是1982年1月1日,而且有可能 是365天和366天,在求和的时候有数据缺失? 谢谢啊。积分 1023 贡献 精华 在线时间 小时 注册时间 2012-5-7 最后登录 1970-1-1 窥视卡 雷达卡 给自己设置

4、一个个性的签名吧 点击前往GrADS官网新地址回复 支持 反对 使用道具 举报 显身卡地板 发表于 2012-11-30 21:18:42 | 只看该作者 |取消关注该作 者的回复 duan2008 发表于 2012-11-30 20:30 登录/注册后可看大图谢谢啊,还是不行。错误如下把那句set t 1去掉,把define那句改成define hgt12=hgt.1(t=1)+hgt.2(t=1)试试river river 当前离线 积分 24285 贡献 精华 在线时间 小时 注册时间 2012-8-28 最后登录 1970-1-1 窥视卡 雷达卡 给自己设置一个个性的签名吧 点击前往G

5、rADS官网新地址回复 支持 反对 使用道具 举报 显身卡duan2008 duan2008 当前离线 积分 1023 贡献 精华 在线时间 小时 注册时间 2012-5-7 最后登录 1970-1-1 窥视卡 雷达卡 5# 楼主| 发表于 2012-11-30 21:57:08 | 只看该作者 |取消关注该作者的回复 river 发表于 2012-11-30 21:18 登录/注册后可看大图把那句set t 1去掉,把define那句改成define hgt12=hgt.1(t=1)+hgt.2(t=1)试试这样可以计算出一个值,但是对于366天的值怎么计算了, 把hgt12存入一个NC文件

6、,但是T是366天的,谢谢。给自己设置一个个性的签名吧 点击前往GrADS官网新地址回复 支持 反对 使用道具 举报 显身卡river river 当前离线 积分 24285 贡献 精华 在线时间 小时 注册时间 2012-8-28 最后登录 1970-1-1 窥视卡 雷达卡 6# 发表于 2012-11-30 22:31:41 | 只看该作者 |取消关注该作 者的回复 duan2008 发表于 2012-11-30 21:57 登录/注册后可看大图这样可以计算出一个值,但是对于366天的值怎么计算了, 把hgt12存入一个NC文件,但是T是366天的,谢谢。用循环可以吧,加几句 reinit

7、 sdfopen D:TDDOWNLOADhgt.1981.nc sdfopen D:TDDOWNLOADhgt.1982.nc enable print D:TDDOWNLOAD1981-1982HGT.gmf set lat 0 60 set lon 70 180 set lev 500 it=1 while(it=365) set t it define hgt12=hgt.1(t=it)+hgt.2(t=it) draw title it print c it=it+1 disable print ;但是多出来一天就不好办了啊 给自己设置一个个性的签名吧 点击前往GrADS官网新地址回

8、复 支持 反对 使用道具 举报 显身卡7# 发表于 2013-3-21 20:18:20 | 只看该作者 |取消关注该作 者的回复 学习了,我一个都没有处理好 你都可以处理多个了xjliutao xjliutao 当前离线 积分 56 贡献 精华 在线时间 小时 注册时间 2013-3-21 最后登录 1970-1-1 窥视卡 雷达卡 论坛里常常有人对 nc 这种内置 ctl 的文件数据处理 提出问题,这里总结下常见的一些问 题及对策。 nc 数据是一类内置 ctl 的文件,也就说没有独立的 ctl 文件,那么打开命令也不是常见的 open,而是 sdfopen 命令,那么要处理这类数据就得知

9、道变量名、变量层次分布等信息, 用 q ctlinfo 命令就可以查看全部的 ctl 了。 为什么提查看 ctl 呢,很多人在处理这类数据的时候会想当然的认定一个变量名,缺省值、 甚至精度都会不注意,那么无论怎么提取,出来的图都不会对的。 下面总结下容易出的问题: 1、从 nc 文件提取出二进制数据(fwrite)设定 需要注意经纬度,层次,时间是否是你需要的部分,尤其是用循环提取数据的朋友,尤其 要注意。有的时候设定经纬度(set lat 0 359.8)出了问题,可是尝试定义 x y 格点 (set x 1 180)的方法试试,实在不行,可以用循环来输出不同的经纬度的数值。 2、注意提取数

10、据的 grads 命令set gxout fwrite set fwrite c:ss00.grd . . . . disablefwrite 最后一行的这个命令,如果忘了加就容易数据不正常,还有的朋友,一个 gs 文件提取了两 个数据文件,两组这类命令中间那个 disable fwrite 丢掉了,数据就彻底乱套了。 3、提取的数据,写 ctl,需要注意与 nc 的 ctl 对应,包括缺测值,精度,这个问题只要 照着 nc 的 ctl 写,层次格点什么的写成你数据对应的就好了。 4、数据提取了,ctl 写好了,画画图看是不是与 nc 的一致,设定的时间、层次,图是不 是不一样,因为用循环出数

11、据的朋友容易犯 写了好几个时间点,数据是一样的错误。 5、还有的朋友需要进一步提取这个 grd 或者 dat 文件,这就涉及到二进制数据的读取与操 作问题了。 二进制数据是无格式的数据,读取与写入都不需要格式说明,里面的数据无法直接看到, 其内部无非是 0 和 1,而且数据之间没有间隔,读取写入只要 read(文件号) write(文件号)就好 读取种要注意,grads 写入的数据循环从内到外依次为 x 、y、z、变量、t,如果你需要确 定某个数据的位置,那么,x 是从西到东,y 是从南到北,z 是从地面到高空,t 是从前到 后的顺序。另外此类文件读取目前论坛里主要有两种方法,一种是直接声明

12、form=binary的,这 种形式简单,如果数据是常规的顺序读取,选择 binary 读取方法简单的多,也不容易出错。 如下面这段:program ex01 real ss(360,180) integeri,j open(100,file=s01.dat,form=binary) open(200,file=data0.txt) doj=1,180read(100) (ss(i,j),i=1,360)write(200,*)(ss(i,j),i=1,360)write(*,*) j,“ “,ss(1,j) enddo end 另一种是无格式直接读取的方式,无格式直接读取主要是用于大量的数据

13、需要处理,你只 需要其中部分,可以用记录的跳跃选取你要的数据,如下面这段:program readsst integer,parameter: ix=360,iy=180,iz=7 real sst(ix,iy,iz) open(9,file=f:samareacchadleycentersst_update.dat,form=unformatted,acce ss=direct,recl=ix*iy*4) read(9,rec=1) (sst(i,j),i=1,ix),j=1,iy) write(*,*) sst end 最后总结下检查错误的思路:最后总结下检查错误的思路: 1、数据没提取出

14、来,先检查 gs 是否没有写 disable fwrite,或者文件名.grd 写错了; 2、数据出来后,ctl 写好,画图与 nc 对比,如果发现,出来的图上只有个别区域有大条 粗线,整幅图都是黑的,说明你的 ctl 里缺测值或者精度不够对应,q ctlinfo 查询下; 3、图对应上了,改变设定时间或层次,没有变化,说明,你提取数据的 gs 错了,层次或 者时间都是输出的同一个点; 4、前三步都没有问题,恭喜你,数据提取成功了。Fortran 编程的时候如果报错说 endof file during read,很可能是你文件名错了,或者你的你读取数据的顺序不是按照 grads 的数据顺序读

15、的,检查你的各个循环的次数,及循环的嵌套顺序是否正确。 5、如果你是顺序的读取数据的话,建议你选择 binary 的方式读取,犯错几率要小; 6、如果以上,还是报错,剩下的原因就可能是你马虎导致微小的错误了,你要认真的从头 到尾检查程序,不行就让别人给你检查,因为有些问题太细微了,自己已经习惯了。求问,我想计算两个 NDVI 数据集中相同一个地区 2001 年到 2006 年 12 月-2 月平均值的差 值图,结果老是出错,不知大家可否帮忙看一下程序,先谢谢大家了! 这是程序:reinit *gimms sdfopen /Users/geog493/ndvi/ndvi0.5deg.2006.n

16、c sdfopen /Users/geog493/ndvi/ndvi0.5deg_modis_westafrica.nc set lat 13 20.0 set lon -15.0 20.0 * DJF define gy01=ave(ndvi.1,t=467,t=472) define gy02=ave(ndvi.1,t=491,t=496) define gy03=ave(ndvi.1,t=515,t=520) define gy04=ave(ndvi.1,t=539,t=544) define gy05=ave(ndvi.1,t=563,t=568) define gy06=ave(nd

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号