爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 16139|回复: 14

[讨论] 用matlab读取cloudsat卫星数据

[复制链接]
发表于 2013-3-15 01:58:03 | 显示全部楼层 |阅读模式

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

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

x
转自:http://hi.baidu.com/sarali/item/6d76380ebb41be183b53ee79

简单的把自己学到的东西总结一下,可能会比较乱
Height=hdfread('E:\cloudproperties\cloudsat\cloud\data\2008269004730_12825_CS_2B-TAU_GRANULE_P_R04_E02.hdf', '/2B-TAU/Geolocation Fields/Height', 'Index', {[1  1],[1  1],[37081    125]});
在这里面,Height是一个37081*125的矩阵。全部为整形。读取时的书写就是
Para = hdftead('fpath\fname','子集的存放目录','index',{[1 1],[1 1]},[37081 125]}),其中index中包含的是行列的起始位置以及步长的设置信息。
Profile_time = hdfread('E:\cloud properties\cloudsat\cloud\data\2008269004730_12825_CS_2B-TAU_GRANULE_P_R04_E02.hdf', '/2B-TAU/Geolocation Fields/Profile_time', 'Fields', 'Profile_time', 'FirstRecord',1 ,'NumRecords',37081);
显示的Profile_time 的数据结构式相同的。如果利用hdftool打开可以看到是结构体。因此这种结构的打开与Height的打开是不同的。基本的读取格式为
Para = hdftead('fpath\fname','子集的存放目录','Fields/para','Fields','para','FirstRecord',1,'NumRwcords',1);
其中的FirstRecord与NumRwcords代表的是结构体的行列数。
ID_SITE = hdfread('E:\cloud properties\cloudsat\cloud\data\2008269004730_12825_CS_2B-TAU_GRANULE_P_R04_E02.hdf', '/2B-TAU/Swath Attributes/ID_SITE', 'Fields', 'AttrValues', 'FirstRecord',1 ,'NumRecords',1);
如果是属性值就要用上述方法。
不过一般在matlab中输入hdftool之后,加载数据时会有相应的语句书写示例,可以把语句直接复制出来。



我个人的读取方法:
hdfname='E:\IDL\pf\JJA_3year_level3.HDF'
A=hdftool(hdfname)
LON = hdfread('E:\IDL\pf\JJA_3year_level3.HDF', '/LON', 'Index', {[1  1],[1  1],[170  360]});
LAT = hdfread('E:\IDL\pf\JJA_3year_level3.HDF', '/LAT', 'Index', {[1  1],[1  1],[170  360]});
Z = hdfread('E:\IDL\pf\JJA_3year_level3.HDF', '/Z', 'Index', {[1],[1],[500]});
PIX_TOT = hdfread('E:\IDL\pf\JJA_3year_level3.HDF', '/PIX_TOT', 'Index', {[1  1  1  1],[1  1  1  1],[2  500  170  360]});
PIX_CLD = hdfread('E:\IDL\pf\JJA_3year_level3.HDF', '/PIX_CLD', 'Index', {[1  1  1  1],[1  1  1  1],[2  500  170  360]});

以上的最后两行:
PIX_TOT = hdfread('E:\IDL\pf\JJA_3year_level3.HDF', '/PIX_TOT', 'Index', {[1 1 1 1],[1 1 1 1],[2 500 170 360]});
PIX_CLD = hdfread('E:\IDL\pf\JJA_3year_level3.HDF', '/PIX_CLD', 'Index', {[1 1 1 1],[1 1 1 1],[2 500 170 360]});

是什么含义?我还是没有完全弄清楚。
应该如何提取出PIX_TOT和PIX_CLD的数据信息并画图呢?
PIX_TOT和PIX_CLD是4-Dsingle的数据。
密码修改失败请联系微信:mofangbao
发表于 2013-3-15 08:51:10 | 显示全部楼层
PIX_TOT = hdfread('E:\IDL\pf\JJA_3year_level3.HDF', '/PIX_TOT', 'Index', {[1 1 1 1],[1 1 1 1],[2 500 170 360]});
PIX_CLD = hdfread('E:\IDL\pf\JJA_3year_level3.HDF', '/PIX_CLD', 'Index', {[1 1 1 1],[1 1 1 1],[2 500 170 360]});

这两行就是读取四维数据的语句,[2 500 170 360]分别对应着每一维的大小
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2013-3-15 21:47:17 | 显示全部楼层

嗯。我知道前两个中括号的元素代表的是起始数据和步长。但是我的所有维度有5个变量,我就不太清楚如何访问读取出这个结构体中的数据,并画出图来。因为我想用的就死以上两列代码读出来的结构体。TOT和CLD。所以现在接下来要做的就是如何访问这个结构体的内容。它是四维的,应该如何访问每一维,并计算和作图呢?
密码修改失败请联系微信:mofangbao
发表于 2013-3-16 12:53:53 | 显示全部楼层
kongfeng0824 发表于 2013-3-15 21:47
嗯。我知道前两个中括号的元素代表的是起始数据和步长。但是我的所有维度有5个变量,我就不太清楚如何访问 ...

四维的没法作图出来显示吧 你可以用squeeze降维 比如说先一个固定时间和一层数然后就成为二维的 再画图
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2013-3-17 00:30:51 | 显示全部楼层
wlzhongouc 发表于 2013-3-16 12:53
四维的没法作图出来显示吧 你可以用squeeze降维 比如说先一个固定时间和一层数然后就成为二维的 再画图

这个应该属于结构体的知识。看来我得去再好好看看教材了。
密码修改失败请联系微信:mofangbao
发表于 2013-3-17 10:13:02 | 显示全部楼层
多维数据绘图,需要转化为两维进行绘图,不过也可以画3维的图
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2013-3-18 01:52:16 | 显示全部楼层
qxtlyf 发表于 2013-3-17 10:13
多维数据绘图,需要转化为两维进行绘图,不过也可以画3维的图

嗯。现在是如何把结构体的数据以相同的向量读取出来,这样作图。
密码修改失败请联系微信:mofangbao
发表于 2013-5-20 14:08:24 | 显示全部楼层
这个先mark 很重要!!!
密码修改失败请联系微信:mofangbao
发表于 2014-10-5 14:47:28 | 显示全部楼层
楼主解决了吗。。我现在要画AOD的图,读取了hdf的AOD信息之后不会画图啊,求教!
密码修改失败请联系微信:mofangbao
发表于 2015-12-18 13:02:17 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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