最近准备使用L8的L2级别产品进行一些研究,但是USGS中间对于数据进行了一定的升级,导致MTL文件发生了变化,如果使用ENVI直接读取MTL文件就会出现错误。
# 在中文网站有很多人介绍说将第一句,
# GROUP = LANDSAT_METADATA_FILE修改成GROUP = L1_METADATA_FILE,
# 并且将所有的GROUP字段都进行相应修改,
# 这种方法可能针对针对L1级别产品有效,但是对于L2级别的产品就会出现错误。
# 还有一种是单独将波段读取,然后使用layerstack进行波段叠加,
# 这个方法虽然是没有问题的,但是处理步骤稍显繁琐。
在网上搜了下,发现很多人都给出了一些处理步骤,但是都没有能很好的把这个问题解决。在YOUTUBE上看到一个视频把这个问题说明白了,把这个解决方案分享给大家。
下面是正确的处理流程:
- 仅将第一句进行修改为GROUP = L1_METADATA_FILE
- 查找所包含的GROUP = LEVEL1***的节点,将其全部删除;
- 此时即可在ENVI里面读取MTL文件打开影像。
操作很简单,但是如果针对大量数据,就稍显费力了,有时间会写个批处理代码共享给大家。
# 作为一个怀旧份子,ENVI我一般都是使用经典版,但是这样修改对经典版是无效的,
# 还是需要针对MTL文件进行整体修改,后面确定了需要修改哪些字段后也会跟大家说明。
2022.4.7 updata
最近需要大量使用到L8数据,就需要对MTL文件更新,写了一个python代码,可以做到上述修改:
fpath = 'E:/bda/LC08_L2SP_124036_20211219_20211223_02_T1/LC08_L2SP_124036_20211219_20211223_02_T1_MTL.txt'
with open(fpath,'r')as file:
conf_list=file.readlines()
file.close()
index=[x for x in range(len(conf_list))if 'LEVEL1'in conf_list[x]]
fo = open(fpath, "w")
i = 1
conf_list[0] = 'GROUP = L1_METADATA_FILE\n'
for i in range(len(conf_list)):
if (i < index[0]):
fo.writelines(conf_list[i])
elif (i > index[-1]):
fo.writelines(conf_list[i])
i=i+1
fo.close()