如何在R中读取MTL文件

3

我是R编程的新手,请问如何读取存档有Landsat卫星数据的MTL文件。

3个回答

3

对于从EarthExplorerGlovis服务获取的Landsat场景提供的标准MTL文件,您可以简单地执行以下操作:

mtl <- read.delim('L71181068_06820100518_MTL.txt', sep = '=', stringsAsFactors = F)

因此,对于以下类似的内容:

GROUP = L1_METADATA_FILE  GROUP = METADATA_FILE_INFO...

您可以使用这个:
> mtl[grep("LMAX",mtl$GROUP),]
                  GROUP L1_METADATA_FILE
64          LMAX_BAND1           293.700
66          LMAX_BAND2           300.900
68          LMAX_BAND3           234.400
70          LMAX_BAND4           241.100
72          LMAX_BAND5            47.570
74         LMAX_BAND61            17.040
76         LMAX_BAND62            12.650
78          LMAX_BAND7            16.540
80          LMAX_BAND8           243.100
84       QCALMAX_BAND1             255.0
86       QCALMAX_BAND2             255.0
88       QCALMAX_BAND3             255.0
90       QCALMAX_BAND4             255.0
92       QCALMAX_BAND5             255.0
94      QCALMAX_BAND61             255.0
96      QCALMAX_BAND62             255.0
98       QCALMAX_BAND7             255.0
100      QCALMAX_BAND8             255.0

每个服务都提供字典,可以在这里这里找到。

来自MTL的信息可能对应用大气和辐射校正至关重要。顺便说一下,landsat包允许您使用DOS()radiocorr()函数运行一些更典型的校正。

您还需要由Chander et al. (2009)提供的标准校准值。

对于更复杂的方法,这篇文章可能是一个很好的起点。


1

MTL文件仅包含元数据(我希望您知道这一点:-)),是一个纯文本文件,因此您可以读取并根据需要解析。如果您对Matlab比较熟悉,可以将此工具 http://www.mathworks.com/matlabcentral/fileexchange/39073 移植为 R 代码。

编辑:根据您的评论,我无法确定您实际需要什么。这里是我从网络上获取的MTL.txt文件的示例: http://landsat.usgs.gov/images/squares/processing_level_of_the_Landsat_scene_I_have_downloaded1.jpg

如果您查看它,您可以看到数据项的名称和值。如果这正是您想要的,那么最简单的方法可能是运行命令:

mtl.values <- read.table('filename.txt' , sep='=')  

这将给你一个两列的数据框,第一列是名称,第二列是值。


好的,如果您可以编辑您的问题以指定您想从标题中提取哪些字段(数据项),我们可能可以编写一个“过滤器”函数来获取正确的数据。 - Carl Witthoft
好的,我想首先堆叠图像,然后从数据中计算NDBI、NDWI和其他一些指数,为此我认为我只需要波段信息... - Kanwal Nayan
请发布您正在使用的MTL文件示例,我将提供一些代码来为您提取感兴趣的项目。 - Carl Witthoft
我之前使用了这个,但你可以使用任何一个版本,我只需要知道如何调用,谢谢你的回应。你真的很有帮助,谢谢!:) L5146040_04020110305_MTL - Kanwal Nayan
为了帮助回答者并使问题和解决方案可重现,最好在某个可访问的地方发布一个MTL文件样本,或者指向网络上公开可访问的文件。 - Ben Bolker
显示剩余3条评论

0

如果您想要读取 Mtl 文件以及图像(堆叠图像),您可以执行以下操作:

  1. 提供你的Mtl文件目录。例如:

    mtlFile<- "\\LE07_L1TP_165035_20090803_20161220_01_T1_MTL.txt"
    
  2. 读取元数据

      metaData <- readMeta(mtlFile)
      metaData
    
  3. 根据元数据文件加载光栅图像

     lsat <- (stackMeta(mtlFile, quantity = "all", category = "image", 
     + allResolutions = FALSE))
     lsat
     plot(lsat)
    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接