- 积分
- 316
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2014-5-9
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
hadisst资料的特点是:除了陆地-1e30的填充值外,在北极附近有额外的-1000的填充值。但是netcdf只允许写一个填充值,因此拿grads默认设置画图不能自动识别-1000这个填充值。所以不能直接画图正确的图。
解决的方法有如下:
1、使用grads的gs脚本人为指定等值线等级画图,毕竟sst的变化范围是很有限的
2、用grads将这个数据转成binary(.grd),在相应的ctl 直接设置undef为1.0e+30
3、使用matlab、IDL等高级的解释型语言读取与处理数据
对于这种摸不清底细的netcdf数据,与其用grads+fortran处理,不如直接用matlab或IDL这样高级一点的解释型语言处理,所以在此分享一个处理hadisst的小程序以供大家参考,目前尚在研究中,贴上附图。
clc
clear all
fn1='d:\ts\1.nc';
%将文件基本信息显示在控制台
ncdisp(fn1)
fid=netcdf.open(fn1,'NOWRITE');
sst=netcdf.getVar(fid,4);%读取4号变量,即sst
lon=netcdf.getVar(fid,2);
netcdf.close(fid);
%截取所需的数据段
sst2=sst(181:360,:,937:1728);
sst2(sst2==-1000)=-1.0e+30; %将-1000改成-1e30填充值
%南北翻转
for t=1:792
sstp=sst2(:,:,t);
sstp=fliplr(sstp);
sst2(:,:,t)=sstp(:,:);
end
%输出处理后的数据
fid=fopen('d:\ts\pick.dat','wb');
fwrite(fid,sst2,'single');
fclose(fid)
%抽一个时次画图
figure
sst3=sst2(:,:,100);
sst3(sst3<=-1e30)=nan;
sst3=sst3';
%sst3=flipud(sst3);
contourf(sst3)
|
|