1km分辨率逐月降雨量和最高温度数据集(1901-2022)的下载可以参考我的另外一篇博客:
这里的温度和降雨数据集都是NC格式的,需要将其处理为tif格式,我采用的处理软件是MATLAB。
本篇博客以处理温度数据为例,下面是完整的处理代码,注意看代码中的注释。
- clc
- clear all
- %% 批读取NC文件的准备工作
- datadir = 'E:\GSH\1Km温度数据\1985-2017_3\'; %指定批量数据所在的文件夹
- filelist = dir([datadir,'*.nc']); %列出所有满足指定类型的文件
- % a = filelist(1).name %查看要读取的文件的编号
- % b = filelist(2).name
- k=length(filelist);
- for i = 1:11 %依次读取并处理,按照文件夹内文件的顺序读取
-
- %% 批量读取NC文件
- ncFilePath = ['E:\GSH\1Km温度数据\1985-2017_3\',filelist(i).name]; %设定NC路径
- num_1 = filelist(i).name(1:8); %读取数据编号,以便于保存时以此编号储存tif
- num_2=strcat('tmx_',num2str(str2num(num_1(5:8))+1 ));
- num_3=strcat('tmx_',num2str(str2num(num_1(5:8))+2 ));
-
- %% 读取变量值
- %根据ncdisp函数读取到的nc文件变量相应替换
- lon=ncread(ncFilePath,'lon'); %读取经度信息(范围、精度)
- lat=ncread(ncFilePath,'lat'); %读取维度信息
- time=ncread(ncFilePath,'time'); %读取时间序列
- pre=ncread(ncFilePath,'tmx'); %获取温度数据
- %一个文件包含三年数据,将这三年的数据单独导出
- time_1=time(1:12);
- time_2=time(13:24);
- time_3=time(25:36);
- pre_1=pre(:,:,1:12);
- pre_2=pre(:,:,13:24);
- pre_3=pre(:,:,25:36);
- sum_pre_1=sum(pre_1,3)/12; %求第一年平均温度
- sum_pre_2=sum(pre_2,3)/12; %求第二年平均温度
- sum_pre_3=sum(pre_3,3)/12; %求第三年平均温度
- %% 存为tif格式
- %第一年
- data_1=rot90(sum_pre_1,1); %逆时针旋转90°,不旋转的话最后的图像朝向是错的
- R = georasterref('RasterSize', size(data_1),'Latlim', [double(min(lat)) double(max(lat))], 'Lonlim', [double(min(lon)) double(max(lon))]);
- geotiffwrite(['E:\GSH\1Km温度数据\1985-2017_3\',num_1,'.tif'],data_1,R);
- disp([num_1,'done'])
- %第二年
- data_2=rot90(sum_pre_2,1); %逆时针旋转90°,不旋转的话最后的图像朝向是错的
- R = georasterref('RasterSize', size(data_2),'Latlim', [double(min(lat)) double(max(lat))], 'Lonlim', [double(min(lon)) double(max(lon))]);
- geotiffwrite(['E:\GSH\1Km温度数据\1985-2017_3\',num_2,'.tif'],data_2,R);
- disp([num_2,'done'])
- %第三年
- data_3=rot90(sum_pre_3,1); %逆时针旋转90°,不旋转的话最后的图像朝向是错的
- R = georasterref('RasterSize', size(data_3),'Latlim', [double(min(lat)) double(max(lat))], 'Lonlim', [double(min(lon)) double(max(lon))]);
- geotiffwrite(['E:\GSH\1Km温度数据\1985-2017_3\',num_3,'.tif'],data_3,R);
- disp([num_3,'done'])
-
- end
- disp('Done!')