1.单个nc文件转为tiff格式
clc;
clear;
data=ncread('G:\SIF_GPP_CLIMAT\CRU_pre\\cru_ts4.03.2011.2018.pre.dat.nc','pre');%读入数据以及需要转为tif的变量
data = rot90(data,3); %逆时针旋转180度
data = fliplr(data);%左右翻转
R = georasterref('RasterSize', [360 720], 'Latlim', [-90 90], 'Lonlim', [-180 180]);%定义坐标系
geotiffwrite(['G:\SIF_GPP_CLIMAT\CRU_pre\1118','.tif'], data,R);%tiff格式存储
几个关键问题:
(1)如何知道自己要转的变量的全名
data=ncread('G:\SIF_GPP_CLIMAT\CRU_pre\\cru_ts4.03.2011.2018.pre.dat.nc','pre');
使用ncinf = ncinfo('G:\SIF_GPP_CLIMAT\CRU_pre\\cru_ts4.03.2011.2018.pre.dat.nc');这里查询到,我需要的变量的全名是pre
(2)定义坐标系
R = georasterref('RasterSize', [360 720], 'Latlim', [-90 90], 'Lonlim', [-180 180]);%定义坐标系
中括号中的数值如何确定?【360 720】是数据的行列,是影像经过翻转过后的行列,纬度的范围和经度的范围在ncinfo读取的变量中的attributes中查看,或者数据下载的官网会公布是全球影像还是只覆盖到南北纬50度。另一种比较万能的办法是下载一个小软件Panoply。nc文件可以用这个软件方便的打开并且绘制二维的影像图和查看变量,以及经纬度范围。
(3)为什么要旋转和左右翻转
如果不翻转,转出来的tif文件用ENVI打开,可能出现影像倒置或者角度不对的情况。具体原因还未查明。所以建议多幅影像转为tif时,先转一幅影像为tif,在ENVI中查看影像的位置是否正确再批量转为tiff。
几个常用到的旋转和翻转的语句:
SIF_SZA = imrotate(SIF_SZA, -90); %顺时针旋转90度
SIF_SZA = rot90(SIF_SZA,2); %逆时针旋转90度
SIF_SZA = flipud(SIF_SZA);%上下翻转
SIF_SZA = fliplr(SIF_SZA);%左右翻转
2.多个nc文件转为tif
关键就是两个问题:多个文件数据的读取与保存,至于转的方法与单个文件一样
clc;
clear;
datadir='J:\SIF_drought\soil\';
filelist=dir([datadir,'*.nc']);
k=length(filelist);
for i=1:k
ncfilepath=['J:\SIF_drought\soil\',filelist(i).name];
num = filelist(i).name(18:23); %读取文件名称的第18到23位,以便tif文件的存储
pre=ncread(ncfilepath,'SoilMoi0_10cm_inst');
pre = rot90(pre,3);
pre = fliplr(pre);
R = georasterref('RasterSize', [600 1440], 'Latlim', [-60 90], 'Lonlim', [-180 180]);
geotiffwrite(['G:\SIF_GPP_CLIMAT\soil_moisture\GLDAS_1\',num,'.tif'],pre,R); %每个文件名的第18到23位进行批量存储
end