clc;
clear;
%% 读取NC文件
datadir = 'F:\NWAF\tempmean\'; %指定批量数据所在的文件夹
filelist = dir([datadir,'*.nc']); %列出所有满足指定类型的文件
for year=2000:3:2015 %该数据集2018年以前每3年一个nc文件,文件名形式为tmp_2000_2002.nc
ncFilePath=['F:\NWAF\tempmean\tmp_',num2str(year),'_',num2str(year+2),'.nc'];
%% 显示结构
ncdisp(ncFilePath);%显示nc文件的所有结构,以便了解需要获取的数据的变量名称等信息
%% 读取变量值
lon=ncread(ncFilePath,'lon');%读取经度变量
lat=ncread(ncFilePath,'lat');%读取纬度变量
time=ncread(ncFilePath,'time');%读取时间变量
tmp=ncread(ncFilePath,'tmp');%从显示nc文件结构的步骤可以看到气温数据的变量名称是tmp
%% 批量输出为tif
for k=1:36 %三年的数据被放在一个nc文件里,因此按月份顺序逐个读取
tmp1=tmp(:,:,k);
data=flipud(tmp1');%南北翻转图像
data(data==-32768)=NaN;%无数据区域设为NaN
if k<=12 %第一年的12个月份,以此类推
R = georasterref('RasterSize', size(data),'Latlim', [double(min(lat)) double(max(lat))], 'Lonlim', [double(min(lon)) double(max(lon))]);%地理栅格数据参考对象(类)
filename1=['F:\NWAF\meanTIF\tmp',num2str(year),'_',num2str(k),'.tif'];
geotiffwrite(filename1,data,R);
elseif (12<k)&&(k<25)
R = georasterref('RasterSize', size(data),'Latlim', [double(min(lat)) double(max(lat))], 'Lonlim', [double(min(lon)) double(max(lon))]);%地理栅格数据参考对象(类)
filename1=['F:\NWAF\meanTIF\tmp',num2str(year+1),'_',num2str(k-12),'.tif'];
geotiffwrite(filename1,data,R);
elseif 25<=k
R = georasterref('RasterSize', size(data),'Latlim', [double(min(lat)) double(max(lat))], 'Lonlim', [double(min(lon)) double(max(lon))]);%地理栅格数据参考对象(类)
filename1=['F:\NWAF\meanTIF\tmp',num2str(year+2),'_',num2str(k-24),'.tif'];
geotiffwrite(filename1,data,R);
end
end
end
for year=2018:2020 %该数据集2018年以后每年一个nc文件,文件名形式为tmp_2018.nc
ncFilePath=['F:\NWAF\tempmean\tmp_',num2str(year),'.nc'];
lon=ncread(ncFilePath,'lon');
lat=ncread(ncFilePath,'lat');
time=ncread(ncFilePath,'time');
tmp=ncread(ncFilePath,'tmp');
for k=1:12
tmp1=tmp(:,:,k);
data=flipud(tmp1');
data(data==-32768)=NaN;
R = georasterref('RasterSize', size(data),'Latlim', [double(min(lat)) double(max(lat))], 'Lonlim', [double(min(lon)) double(max(lon))]);%地理栅格数据参考对象(类)
filename1=['F:\NWAF\meanTIF\tmp',num2str(year),'_',num2str(k),'.tif'];
geotiffwrite(filename1,data,R);
end
end
来源:https://zhuanlan.zhihu.com/p/391362871?utm_id=0
clc;
clear;
%% 读取NC文件
ncFilePath = 'F:\Data\tmp_2009_2011.nc'; %指定批量数据所在的文件夹
%% 显示结构
ncdisp(ncFilePath);%显示nc文件的所有结构,以便了解需要获取的数据的变量名称等信息
%% 读取变量值
lon=ncread(ncFilePath,'lon');%读取经度变量
lat=ncread(ncFilePath,'lat');%读取纬度变量
time=ncread(ncFilePath,'time');%读取时间变量
tmp=ncread(ncFilePath,'tmp');%从显示nc文件结构的步骤可以看到气温数据的变量名称是tmp
year=2009;
%% 批量输出为tif
data=flipud(rot90(tmp,1));%逆时针旋转图像,这里转出tif后可以先看一下数据的朝向以及是否需要翻转
%每种数据需要翻转和旋转的角度可能不一样,需要自己确定
data(data==-32768)=NaN;%无数据区域设为NaN
% 第一年的数据
tmp12=data(:,:,1:12);
sum_tmp12=sum(tmp12,3)/12.0;
% 第二年的数据
tmp24=data(:,:,13:24);
sum_tmp24=sum(tmp24,3)/12.0;
% 第三年的数据
tmp36=data(:,:,25:36);
sum_tmp36=sum(tmp36,3)/12.0;
% 导出各个年份数据
R = georasterref('RasterSize', size(sum_tmp12),'Latlim', [double(min(lat)) double(max(lat))], 'Lonlim', [double(min(lon)) double(max(lon))]);%地理栅格数据参考对象(类)
filename1=['F:\Data',num2str(year),'.tif'];
geotiffwrite(filename1,sum_tmp12,R);
R = georasterref('RasterSize', size(sum_tmp24),'Latlim', [double(min(lat)) double(max(lat))], 'Lonlim', [double(min(lon)) double(max(lon))]);%地理栅格数据参考对象(类)
filename1=['F:\Data',num2str(year+1),'.tif'];
geotiffwrite(filename1,sum_tmp24,R);
R = georasterref('RasterSize', size(sum_tmp36),'Latlim', [double(min(lat)) double(max(lat))], 'Lonlim', [double(min(lon)) double(max(lon))]);%地理栅格数据参考对象(类)
filename1=['F:\Data',num2str(year+2),'.tif'];
geotiffwrite(filename1,sum_tmp36,R);