ENVI无法打开landsat level2级产品--matlab
作者:互联网
% @wang 2021\11\15
% 批量修改Landsat8 Level_2 MTL.txt数据
% 由于从USGS上下载的Landsat8-SR-Level2级别的数据无法以打开MTL.txt方式载入ENVI
% 本程序可以将MTL.txt文件中的格式进行修改,输出到同名文件夹下,之后便可以使用MTL.txt载入数据
clear
clc
close all
MTL_st = readtable('MTL_st.txt'); % ENVI可以识别的结构
filepath = uigetdir; % 打包数据文件路径
dirOutput = dir(filepath);
Dataset_Name = {dirOutput.name};
Dataset_Name = Dataset_Name(3:end); % 获取文件夹下的所有数据包名
% 修改MTL文件
for i = 2:length(Dataset_Name)
datapath = [filepath,'\',Dataset_Name{i}];
dir_MTL = dir(fullfile(datapath,'*MTL.txt'));
dir_MTL_name = dir_MTL.name;
MTL_0 = readtable([datapath,'\',dir_MTL_name]); % 待修改的MTL文件
MTL_0.Properties.VariableNames{3} = 'L1_METADATA_FILE';
MTL = MTL_0(1:8,:);
MTL = [MTL;MTL_st];
MTL = [MTL;MTL_0(31:end,:)]; % 初步调整的MTL文件
% 修改读入的影像文件名
for j = 1:size(MTL_st(:,1))
% 取影像命名文件后几位
temp0 = MTL_st.L1_METADATA_FILE(j); % 读取文件名
temp = temp0{1}; %转化为字符串
% 修改MTL中读入文件名
MTL(j+8,3) = {[Dataset_Name{i},temp(41:end)]};
end
MTL(end-1,3) = {'L1_METADATA_FILE'}; % 修改名称
% 为非数字字符添加""
for k = 2:size(MTL(:,1))-2
temp = MTL(k,3);
temp = table2cell(temp);
temp = temp{1};
flag = str2double(temp);
if isnan(flag)
temp0 = MTL.L1_METADATA_FILE(k);
MTL(k,3) = {['"',temp0{1},'"']};
end
end
MTL(195:218,:) = MTL(9:32,:); % 调整文件名
% 输出MTL文件
[nrows,ncols]= size(MTL);
filename = [datapath,'\','MTL.txt']; % 输出路径为同名文件夹
fid = fopen(filename, 'w');
fprintf(fid, '%s', 'GROUP = L1_METADATA_FILE');
fprintf(fid, '\n');
for row = 1:nrows
temp = table2array(MTL(row,:));
fprintf(fid, '%s', temp{:});
fprintf(fid, '\n');
end
fclose(fid);
end
标签:end,fid,temp,--,landsat,level2,MTL,txt,dir 来源: https://blog.csdn.net/weixin_40972452/article/details/121344473