上一篇中已经将下载的原始GPM IMERGM V06月降水数据从nc4转为tif格式。由于该数据集储存降水数据的单位为mm/hr,而一般研究中需要的是月降水数据,所以利用matlab将数据单位从mm/hr转为mm/month。
%将GPM的单位从mm/hr转换为mm/month
clc;
clear;
%% 批量读取并输出tif文件
% 批读取tif文件的准备工作
filePath='D:\data\GPM2001-2020\ncTOtif\'; %读取文件所在文件夹
tiffile_list=dir(strcat(filePath,'*.tif'));%用dir函数获取当前文件夹下所有.tif文件,strcat水平串联字符串
tif_length=length(tiffile_list); %获取tif文件个数
% 批量读取tif信息
for i = 1:tif_length %逐一读取tif文件
tifFilePath = ['D:\data\GPM2001-2020\ncTOtif\',tiffile_list(i).name]; %设定批量读取tif文件路径(文件夹+文件名)
name = tiffile_list(i).name(); %读取原始tif文件名称,为设置输出文件名称准备
year = str2num(tiffile_list(i).name(21:24)); %str2num将字符串类型转换为数值型,从文件名中读取年份并转化为数值型
month = str2num(tiffile_list(i).name(25:26)); %str2num将字符串类型转换为数值型,从文件名中读取月份并转化为数值型
[A,R] = geotiffread(tifFilePath); %geotiffread函数读取带有地理信息的tiff图像,如遥感图像等,该方法返回两个参数,第一个参数A是图像的二维矩阵,第二个参数R是地理信息
info = geotiffinfo(tifFilePath); %读取tif数据的地理信息,为后面导出为tif数据提供地理信息
% 计算月均降水数据,将单位从mm/hr转化为mm/月
monthday = [31,28,31,30,31,30,31,31,30,31,30,31]; %从1月到12月每月天数
if ((mod(year,4)==0 && mod(year,100)~=0) || mod(year,400)==0)
monthday(2) = 29; % 判断是否闰年,闰年能被4整除且不能被100整除或者能被400整除,闰年2月有29天
end
month_days = monthday(month); %获取计算月份天数
month_pre= A .* 24 .* month_days; %计算每月降水量
% 输出,第一个参数(方括号)是输出路径(这里方括号里写入输出文件夹和名称),第二个参数是图像二维矩阵,第三个参数是图像的地理信息,第四、五个参数是投影信息,若以原参考系保存,四五参数不需要变
geotiffwrite(['D:\data\GPM2001-2020\ncTOtif\month_pre\',name], month_pre, R, 'GeoKeyDirectoryTag', info.GeoTIFFTags.GeoKeyDirectoryTag);
disp([name,'done'])
end
disp('finish!')