需求
使用Matlab读取tif格式的栅格数据,并根据该栅格数据裁剪多副其余栅格数据
制作掩膜数据
Mask_data = double(importdata('D:\GPP\ecology\eco1km\2015\eco1km.tif')); % 获取研究区栅格数据
Mask_data(Mask_data==15|Mask_data==4) = nan; % 将研究区外nodata设为nan值,本例像元值等于15或4的为NAN
Mask_data(Mask_data>0) = 1; % 研究区其余设为1
栅格数据批量裁剪
% 输入需要裁剪的栅格数据地址,读取文件夹下所有tif文件,一个文件代表一个时间(天\16d\月)的数据
dz = dir('D:\GPP\EVI_TEM\TEM\*.tif');
for i = 1:size(dz,1) % 计算文件个数
filename = strcat(dz(i).folder,'\',dz(i).name); % 栅格数据的每个文件地址+文件名
data = double(importdata(filename)); % 获取栅格数据
%data(data<0) = nan; % 将研究区外nodata设为nan值,本例不需要
data2 = data.*Mask_data; % 利用任何数*NAN为NAN,*1为原数进行裁剪
data_all{i} = data2; % 存放于元胞中
end
输出裁剪后的栅格数据
% 先读取一个已有栅格数据的地理信息
[a,R] = geotiffread('D:\GPP\ecology\eco1km\2015\eco1km.tif');
info = geotiffinfo('D:\GPP\ecology\eco1km\2015\eco1km.tif');
% 输出带有地理坐标信息的栅格数据
for k = 1:length(data_all)
tempp = data_all{k};
filename = strcat(dz(k).folder,'\L_',dz(k).name); % 栅格数据的每个文件地址+文件名
geotiffwrite(filename,tempp,R,'GeoKeyDirectoryTag',info.GeoTIFFTags.GeoKeyDirectoryTag)
end
补充说明
掩膜的栅格数据和需裁剪的栅格数据,行列数需一致
网友评论