Matlab TRMM_3B42数据格式转换(nc转tif,附代码)

[2021年4月21日更新]
TRMM_3B42_Daily数据【TRMM (TMPA) Precipitation L3 1 day 0.25 degree x 0.25 degree V7 (TRMM_3B42_Daily)】无需转置;
TRMM_3B42RT_Daily数据【TRMM (TMPA-RT) Near Real-Time Precipitation L3 1 day 0.25 degree x 0.25 degree V7 (TRMM_3B42RT_Daily)】无需转置;
TRMM_3B42RT_3h数据【TRMM (TMPA-RT) Near Real-Time Precipitation L3 3 hour 0.25 degree x 0.25 degree V7 (TRMM_3B42RT)】需要转置。
TRMM_3B42_3h的数据【TRMM (TMPA) Rainfall Estimate L3 3 hour 0.25 degree x 0.25 degree V7 (TRMM_3B42)】为HDF格式,本文只考虑nc转tif格式,暂不考虑HDF格式。
三种数据的比较见文末。

[2021年7月14日更新]
更新代码中的Refference = georasterref('RasterSize', size(preciSets), 'Lonlim', [-180 180], 'Latlim', [-50 50])语句,代码会根据数据的经纬度范围自适应设置。
另外,TMPA-RT的纬度范围为[-60 60]。

原代码:

Refference = georasterref('RasterSize', size(preciSets), 'Lonlim', [-180 180], 'Latlim', [-50 50]);

更新代码:

Refference = georasterref('RasterSize', size(preciSets), ...
        'Lonlim', double([floor(min(lon(:))) ceil(max(lon(:)))]), ...
        'Latlim', double([floor(min(lat(:))) ceil(max(lat(:)))]) ...
    );

TRMM 3B42数据转为tif格式。TRMM数据的下载步骤请参考博客—TRMM降水数据下载步骤


在nc文件转tif文件时,常会遇到影像旋转的问题,遇到此类问题常需要使用rot90()函数将数据进行转置。但是并不是所有的nc数据都需要进行转置,在此之前需要判断数据的行列数以及经纬度(lon和lat)的长度。

【TRMM_3B42RT_3h数据的转置不能使用rot90()函数,直接用B = A'即可】

在读取nc文件的数据(data)部分以及经纬度后进行判断。如果data部分的数组为A x B,而lat的长度为A,lon的长度为B时,此时不需要进行转置,例如TRMM 3B42的nc4格式的数据中,data部分为400 x 1440,lat的长度为400,lon的长度为1440,此时无需转置;反之则需要转置。

另一个问题是通过georasterref()函数设置地理栅格数据参考对象(类)时,需要注意'Lonlim''Latlim'的取值范围,此处的设置需要参考lon和lat。例如lon的范围为[-179.875 179.875],lat的范围为[-49.875 49.875]时,‘Lonlim’ 和 ‘Latlim’ 的设置应该为'Lonlim', [-180 180], 'Latlim', [-50 50]

TRMM_3B42RT_3h数据转为tif格式数据的参考代码以及结果如下:

%%
clc;
clear;

%%
ncpath = 'D:\20200115\3B42RT.2013092200.7.nc4';
ncinf = ncinfo(ncpath);
preciSets = ncread(ncpath, 'precipitation');
preciSets = preciSets';
lon = ncread(ncpath, 'lon');
lat = ncread(ncpath, 'lat');
OutputPath = 'D:\20200115\3B42RT.2013092200.7.tif';
%地理栅格数据参考对象(类)
Refference = georasterref('RasterSize', size(preciSets), ...
        'Lonlim', double([floor(min(lon(:))) ceil(max(lon(:)))]), ...
        'Latlim', double([floor(min(lat(:))) ceil(max(lat(:)))]) ...
    );
%写成GeoTif格式%写成GeoTif格式
geotiffwrite(OutputPath, preciSets, Refference);   

TRMM_3B42_Daily数据 / TRMM_3B42RT_Daily数据转为tif格式数据的参考代码以及结果如下:

%%
clc;
clear;

%%
ncpath = 'D:\20200115\3B42_Daily.20000823.7.nc4';
ncinf = ncinfo(ncpath);
preciSets = ncread(ncpath, 'precipitation');
lon = ncread(ncpath, 'lon');
lat = ncread(ncpath, 'lat');
OutputPath = 'D:\20200115\3B42_Daily.20000823.7.tif';
%地理栅格数据参考对象(类)
Refference = georasterref('RasterSize', size(preciSets), ...
        'Lonlim', double([floor(min(lon(:))) ceil(max(lon(:)))]), ...
        'Latlim', double([floor(min(lat(:))) ceil(max(lat(:)))]) ...
    );
%写成GeoTif格式%写成GeoTif格式
geotiffwrite(OutputPath, preciSets, Refference);   

在这里插入图片描述


补充对比:

展示的是2013年9月22日的数据,参考图为https://journals.ametsoc.org/view/journals/wcas/11/2/wcas-d-18-0053_1.xml的Figure 1(a)


TRMM_3B42_Daily数据,单位为mm d-1,DN值范围为[0, 332.7]:
在这里插入图片描述


TRMM_3B42RT_Daily数据,单位为mm d-1,DN值范围为[0, 228.96]:
在这里插入图片描述


TRMM_3B42RT_3h(单位为mm hr-1)合成的Daily数据(3B42RT.2013092200.7.nc4 / 3B42RT.2013092203.7.nc4 / 3B42RT.2013092206.7.nc4 / 3B42RT.2013092209.7.nc4 / 3B42RT.2013092212.7.nc4 / 3B42RT.2013092215.7.nc4 / 3B42RT.2013092218.7.nc4 / 3B42RT.2013092221.7.nc4),DN值范围为[-19.5, 92.49](乘以3之后即为daily):
在这里插入图片描述

另外, TRMM_3B42RT_3h数据存在负值。
3B42RT.2013092203.7.nc4表示2013年9月22日3时±1.5小时内的降水,详情请参考TRMM_3B42RT_3h数据主页

  • 2
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A-Chin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值