爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 53065|回复: 38

[源程序] ISCCP数据处理及绘图

[复制链接]

新浪微博达人勋

发表于 2016-11-5 13:19:08 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 Lighting 于 2016-12-9 10:21 编辑

      看到论坛有不少关于ISCCP数据处理及绘图的问题,而且一直没人解决。现提供一种方法,以解决绘制填充等值线图的问题。

      之前也短暂的接触过ISCCP数据的处理以及绘图,因为ISCCP数据网格并不是均匀的,用MATLAB进行画图需要对数据进行网格化,而NCL刚好有这部分的介绍,当时就是用NCL进行绘图。但最近心血来潮,便试着用MATLAB进行绘制,再开始上程序之前,先说一下ISCCP投影网格的问题。当然,如果你对这个不感兴趣,可直接跳过。

================= 投影网格介绍=====================
      读取数据之后,通过对纬度数据的观察可以看出,纬度格距是均匀变化的,格距为2.5度,反观经度的格距变化是不均匀的。

                               
登录/注册后可看大图

       图中上下两行分别为纬度和经度坐标,每个坐标对构成一个网格,坐标对为网格中心的经纬度坐标。对纬度数据进行观察可以发现,纬度变化是有规律的,从小到大,纬度为固定值的个数是变化的,但是这个纬度为固定值时有多少个纬度点是可以统计出来的。比如纬度等于1.25时,共有三个,也就是说纬度等于1.25的线上有三个网格,用360/网格数。网格中心坐标分别为上图所示。纬度等于3.75时共有7个网格点。因为每条线上网格的大小都是一样的,所以可以通过求出每条线上的网格数,得到经度的中心点坐标。

                               
登录/注册后可看大图

        纬度共分为72个网格,经度方向网格大小不一样,但最小经度间隔大小为2.5度,所以分为144个网格。
        得到经度的中心点坐标后,就可以把处理后得到的要绘图的一维变量插值到网格中,然后即可绘图。

================ 以下为示例 =======================
  1. fip = 'E:\MATLAB\data\isccp\';
  2. vartime = 9;
  3. varsort = 8;
  4. data = getisccp(fip, vartime, varsort);
  5. [var, LON, LAT] = isccpgrid(data,);
  6. m_proj('Equidistant cylindrical','lon',[-180, 180],'lat',[-90, 90]);
  7. m_contourf(LON-180,LAT-90,var,'linestyle','none');
  8. m_coast('linewidth',1,'color','k');
  9. m_grid('linestyle','none','linewidth',1)
复制代码
       执行上述命令后可得到以下效果图,可以看到拐角处出现空白区域。这个是由于越到两极网格数越少网格越大导致。

                               
登录/注册后可看大图

  1. [var, LON, LAT] = isccpgrid(data, true);
  2. m_proj('Equidistant cylindrical','lon',[-180, 180],'lat',[-90, 90]);
  3. m_contourf(LON-180,LAT-90,var,'linestyle','none');
  4. m_coast('linewidth',1,'color','k');
  5. m_grid('linestyle','none','linewidth',1)
复制代码
       执行上述命令后,空白区域便被填充了,而且不会出现问题。

                               
登录/注册后可看大图

       是否填充空白区域你可以通过可选逻辑参数控制,一般情况下,只有用到全球分布图时才考虑是否填充,绘制中纬度区域分布图时,可忽略这个参数,因为中纬度区域网格数多,单个网格面积小,基本上都覆盖了。

isccpgrid.m

1.59 KB, 下载次数: 74, 下载积分: 金钱 -5

网格化数据

getisccp.m

2.27 KB, 下载次数: 85, 下载积分: 金钱 -5

ISCCP的HDF格式数据处理

评分

参与人数 1金钱 +20 贡献 +2 收起 理由
nuist2015 + 20 + 2

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-11-22 14:29:25 | 显示全部楼层
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2017-1-11 20:02:35 | 显示全部楼层
请问楼主用NCL怎样处理ISCCP资料?不用插值吗?怎样在NCL里实现ISCCP资料的数据与经纬度对应?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-1-11 22:02:44 | 显示全部楼层
zhangjingjia 发表于 2017-1-11 20:02
请问楼主用NCL怎样处理ISCCP资料?不用插值吗?怎样在NCL里实现ISCCP资料的数据与经纬度对应?

http://www.ncl.ucar.edu/Applications/isccp.shtml
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-1-12 13:35:39 | 显示全部楼层
谢谢楼主分享的链接,链接里的ISCCP资料是nc格式的,而且资料里面应该就已经有经纬度信息了,我下载的是hdf格式的,里面没有经纬度信息怎么处理?求赐教
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-1-12 14:10:15 | 显示全部楼层
本帖最后由 Lighting 于 2017-1-12 14:12 编辑
zhangjingjia 发表于 2017-1-12 13:35
谢谢楼主分享的链接,链接里的ISCCP资料是nc格式的,而且资料里面应该就已经有经纬度信息了,我下载的是hdf ...

这就是后来转到MATLAB的原因所在。NCL处理HDF格式数据时,有些信息无法读出,而经纬度信息就包括在这部分中。经纬度信息需要使用其他软件读取,然后存储到文本文件中,然后再使用NCL中的asciiread读取出来,最后才能绘图。
当然你可以转换HDF格式文件为nc格式试试看,我记得当时我试过,但是不行。或者你转换hdf为h5格式试试看。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-1-12 14:27:43 | 显示全部楼层
多谢楼主
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2017-1-12 16:04:58 | 显示全部楼层
楼主,请问用matlab怎么读ISCCP的hdf资料?怎样能得到经纬度信息呢?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-1-12 16:11:59 | 显示全部楼层
zhangjingjia 发表于 2017-1-12 16:04
楼主,请问用matlab怎么读ISCCP的hdf资料?怎样能得到经纬度信息呢?

下载帖子中提供的程序或自行百度matlab处理hdf格式数据
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-1-12 17:14:34 | 显示全部楼层
好的,谢谢
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

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

本版积分规则

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

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

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