使用Matlab读取栅格数据
2019-11-09 本文已影响0人
荔枝猪
需求
使用Matlab读取tif格式的栅格数据,tif格式的栅格数据最为常见,即使不是也可通过ArcGIS或ENVI等对其进行转换,在Matlab中读取也很方便
读取一个文件夹下的所有tif格式的栅格数据
%% 以读取EVI数据为例
% 获取所有tif文件名
data_dz = dir('D:\MODIS\EVI\*.tif');
% 读取数据,依次存储在元胞中
for i = 1:length(data_dz)
filename = strcat(data_dz(i).folder,'\',data_dz(i).name); %文件路径和文件名
data = double(importdata(filename)); %获取data
data (data <-0.2) = NaN; %缺失值设为nan
data_sum{i} = data;
end
读取一个文件夹下包含子文件夹,tif格式栅格数据位于子文件夹下
%% 以读取EVI数据为例
% 获取子文件夹信息
subdir = dir('E:\MODIS\EVI_sg');
% 读取一个现有数据,获取其矩阵行列大小
a = importdata('E:\MODIS\test\1\EVI20010101.tif');
[m,n] = size(a);
% 构建和data同大小的一列NaN矩阵
data_sum = zeros(m*n,1)+NaN;
k1=1; % 初始化为1
% 第1个数组元素和第2个数组元素分别是’.’和’..’,表示当前目录和上层目录,不读取
for i = 1 : length( subdir )
if( isequal( subdir( i ).name, '.' )||...
isequal( subdir( i ).name, '..')||...
~subdir( i ).isdir) % 如果不是目录则跳过
continue;
end
% 利用fullfile函数根据指定的文件夹和文件名构建完整的文件设定
subdirpath = fullfile( subdir( i ).folder, subdir( i ).name, '*.tif' );
dat = dir( subdirpath ); % 子文件夹下找后缀为tif的文件
for j = 1 : length( dat )
datpath = fullfile( subdir( i ).folder, subdir( i ).name, dat( j ).name);
% 此处添加为对文件的读写或其它操作 %
data = double(importdata(datpath)); %获取data
data = reshape(data,m*n,1); % 转为1列
data(data<-0.2) = NaN; % 缺失值设为nan
data_sum(:,k1) = data; % 第一列为第一个时间的data
k1 = k1+1;
end
end