我如何读取R中的MTL文件

时间:2013-02-07 09:39:52

标签: r

我对R编程非常陌生,请有人告诉我如何阅读使用landsat卫星数据存档的MTL文件。

3 个答案:

答案 0 :(得分:2)

对于从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

每个服务都提供了词典,找到了herehere

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

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

对于更复杂的方法,this可能是一个良好的开端。

答案 1 :(得分: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='=')  

这将为您提供一个2列数据框,名称在第一列,值在第二列。

答案 2 :(得分: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)