CloudSat数据下载
这个数据我之前和CALIPSO弄混了,后来发现它们虽然是同一个火箭上去,但是数据产品却在不同的平台下,CloudSat的数据更加关注云的特性,包括云覆盖、云水当量、云分类数据。
数据网址在:CloudSat网址
但是目前数据网站下载似乎无法连接,因此采用了添加公钥登录sftp的方法下载,添加sftp的方法在网站上已经有了介绍 SFTP aceess,这里就不多赘述了。
产品包括1-B 2-B 2-C等,每个数据包含的变量不同,这里我下载的是2B-CWC数据,主要是包括云水当量廓线。
数据处理
下载后的数据命名方式为:[yeardaynumtime_轨道名_产品名.hdf]
如:2018213150513_65299_CS_2B-CWC-RO_GRANULE_P1_R05_E07_F03.hdf
指的就是2018年的低213天15时05分13秒得到的2B-CWC数据。
数据是普通hdf格式,在matlab中,使用hdfinfo
和hdfread
读取。
使用hdfinfo
可以得到一个结构体,在matlab中,可以直接点击查看结构体的内容,并通过点击查看相迎变量,再通过hdfread
读取数据,
如下图:
这里是个三层结构,数据主要在info.Vgroup.Vgroup,Vdata里。
开始读取数据:
hdfname=[path,filename{i}];
info=hdfinfo(hdfname);
vgroup=info.Vgroup.Vgroup;
geoinfo=vgroup(1).Vdata;
lat=hdfread(geoinfo(4));
lon=hdfread(geoinfo(5));
height=hdfread(vgroup(1).SDS);
time=hdfread(geoinfo(2));
vdata=vgroup(2).SDS;
lwc=hdfread(vdata(13));
iwc=hdfread(vdata(15));
其中,iwc和lwc即为云的液态水含量与固态水含量。
height为卫星的radar bin的高度,总共有125个bin,间隔大约为240m,大约在-4570-25000m之间。下图为bin的示例:
考虑到实际使用时,主要是提取部分区域的部分数据用来比对,通过设定经纬度的边界来提取:
lat=lat{1};
lon=lon{1};
idx1=find(lat<latmax&lat>latmin);
idx2=find(lon<lonmax&lon>lonmin);
idx=intersect(idx1,idx2);
if ~isempty(idx)
iwc_use=iwc(idx,:);
lwc_use=lwc(idx,:);
height_use=height(idx,:);
lat_use=lat(idx);
lon_use=lon(idx);
a=filename{i};
ncname=regexp(a,'\d{13}','match');
d=ncname{1};
y=str2double(d(1:4));
daynum=str2double(d(5:7));
h=str2double(d(8:9));
[mon,day]=day2mon(y,daynum);
newname=datestr(datetime(y,mon,day,h,0,0),'yyyy-mm-dd_HH');
ncfile=[path,newname,'.nc'];
disp(ncfile);
nccreate(ncfile,'lat','Dimensions',{'x',length(idx)});
nccreate(ncfile,'lon','Dimensions',{'x',length(idx)});
nccreate(ncfile,'height','Dimensions',{'x',length(idx),'y',125});
nccreate(ncfile,'iwc','Dimensions',{'x',length(idx),'y',125});
nccreate(ncfile,'lwc','Dimensions',{'x',length(idx),'y',125});
ncwrite(ncfile,'lat',lat_use);
ncwrite(ncfile,'lon',lon_use);
ncwrite(ncfile,'iwc',iwc_use);
ncwrite(ncfile,'lwc',lwc_use)
ncwrite(ncfile,'height',height_use)
end
输出即可