其他分享
首页 > 其他分享> > ENVI无法打开landsat level2级产品--matlab

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