news 2026/10/14 20:17:24

解决ENVI无法打开Landsat8/9 C2L2数据的问题:Python脚本实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
解决ENVI无法打开Landsat8/9 C2L2数据的问题:Python脚本实现

解决ENVI无法打开Landsat8/9 C2L2数据的问题:Python脚本实现

  • 常见问题
    • 问题及参考博客
    • 问题现象
  • 解决方案
    • 手动解决方法
    • Python脚本实现批量处理

常见问题

问题及参考博客

在处理从USGS网站下载的Landsat8/9 C2 L2数据时,常常会遇到将MTL.txt 文件直接拉入ENVI或直接打开Metadata数据文件时提示错误的情况。对于该问题的常见问题及解决方案,可以参考文章:
https://blog.csdn.net/zbh13859825167/article/details/139309431。

问题现象

当尝试将从USGS网站下载的Landsat8/9 C2 L2数据的MTL.txt 文件直接导入ENVI或者直接打开Metadata数据文件时,会出现如下错误提示:

解决方案

手动解决方法

Landsat8数据
对于Landsat8数据,可通过修改下载的MTL.txt 文件来解决问题。具体步骤如下:

将文件第一行的GROUP = LANDSAT_METADATA_FILE修改为GROUP = L1_METADATA_FILE。
删除文件中第183行GROUP = LEVEL1_PROCESSING_RECORD与第227行END_GROUP = LEVEL1_PROCESSING_RECORD之间的内容(Landsat 9具体行号位置可能有变化,也在183行附近,注意这几个名称就行。 )。完成上述修改后,即可在ENVI中直接打开该数据文件。
Landsat9数据
Landsat9数据的处理在Landsat8数据处理的基础上,还需要额外增加一步:将文件第53行的SPACECRAFT_ID = "LANDSAT_9"改为SPACECRAFT_ID = "LANDSAT_8"。完成这些修改后,也可以在ENVI中直接打开数据文件。

Python脚本实现批量处理

为了更高效地处理多个数据文件,我们可以使用Python编写一个脚本实现批量处理。以下是具体的脚本设计原理、思路及代码:
脚本设计原理与思路
脚本会遍历指定文件夹及其子文件夹中的所有MTL.txt 文件,对每个文件按照上述手动处理的规则进行修改。具体来说,脚本会完成以下操作:

  1. 将文件第一行的GROUP = LANDSAT_METADATA_FILE替换为GROUP = L1_METADATA_FILE。
  2. 检查文件第53行,如果包含SPACECRAFT_ID = "LANDSAT_9",则将其替换为SPACECRAFT_ID = "LANDSAT_8"。
  3. 删除文件中第183 - 227行(Python索引从0开始,对应索引为182 - 226)的内容。

脚本代码

importosdefprocess_mtl_files(root_folder):forroot,dirs,filesinos.walk(root_folder):forfileinfiles:iffile.endswith("MTL.txt"):file_path=os.path.join(root,file)try:withopen(file_path,'r',encoding='utf-8')asf:lines=f.readlines()print(f"正在处理文件:{file_path}")iflen(lines)>0:lines[0]=lines[0].replace("GROUP = LANDSAT_METADATA_FILE","GROUP = L1_METADATA_FILE")land_index=lines[53].rfind('9')ifland_index!=-1:lines[53]=lines[53].replace(" SPACECRAFT_ID = \"LANDSAT_9\""," SPACECRAFT_ID = \"LANDSAT_8\"")iflen(lines)>=227:#判断是否删除过183行到227行之间内容iflines[182].rfind('GROUP = LEVEL1_PROCESSING_RECORD')!=-1:dellines[182:227]# 182对应第183行,226对应第227行else:print(f"文件{file}行数不足,无法删除指定行")# 写入修改后的内容withopen(file_path,'w',encoding='utf-8')asf:f.writelines(lines)print(f"成功处理文件:{file_path}")exceptExceptionase:print(f"处理文件{file_path}时出错:{str(e)}")else:print(f"{root_folder}文件夹下没有可处理的文件")if__name__=="__main__":target_folder=r"C:/Users/79877/Downloads/EdgeDownload/test"# 替换为实际文件所在文件夹路径process_mtl_files(target_folder)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 20:16:38

HDFS高可用搭建实战:双NameNode+Zookeeper自动故障转移全流程

最近自己动手把一套HDFS集群从单NameNode升级成了真正的高可用,顺带把Zookeeper也集成进去。Hadoop高可用这个事儿,光看官方文档很容易绕晕,因为不只是改两个配置文件那么简单,它牵扯到元数据共享、自动故障转移、隔离机制、Journ…

作者头像 李华
网站建设 2026/10/14 20:13:44

jagsUI:R语言贝叶斯建模的JAGS封装与工程化实践

简介:jagsUI 是一个面向贝叶斯统计建模与 MCMC 采样用户的 R 语言扩展包,用于在 R 内部直接调用 JAGS(Just Another Gibbs Sampler)完成分析。它作为 rjags 功能的包装器与备用接口,补充了自定义输出与图形选项&#x…

作者头像 李华
网站建设 2026/10/14 20:12:52

Nginx更换SSL证书不生效?从加载原理到缓存排查的完整方案

接手过服务器的人多半都撞上过这个鬼打墙的场面:明明把新证书换上了,Nginx 配置也改了,浏览器一访问,旧证书还在那里泰然自若地挂着。尤其是证书临近过期那几天,这种问题能把人急得手心冒汗。今天不聊证书申请和配置的…

作者头像 李华
网站建设 2026/10/14 20:12:42

Nginx学习

2.2.1 反向代理 代理是什么?简单来说,我找一个中间人,代替我去做一件事情,只要他给我结果就可以。代理一般分为两种:正向代理、反向代理正向代理&*反向代理 区别 从用途上来讲:正向代理-为局域网客户端…

作者头像 李华
网站建设 2026/10/14 20:11:26

最大似然估计与最大后验估计:从贝叶斯原理到深度学习正则化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/14 20:09:46

瑞芯微RK3566图像分类模型部署实测:选型、量化与性能

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华