代码之家  ›  专栏  ›  技术社区  ›  Karim Ghariani

R-获取RasterLayer的特定波段

  •  3
  • Karim Ghariani  · 技术社区  · 12 年前

    A有一个带有4个波段的RasterLayer:

        >rx<-raster("/media/karimdion/Passport/Essais/po_3804017_bgrn_0000000 tif")
        > str(rx)
          Formal class 'RasterLayer' [package "raster"] with 12 slots
      @ file    :Formal class '.RasterFile' [package "raster"] with 12 slots
          @ nbands      : int 4
          @ bandorder   : chr "BIL"
     @ data    :Formal class '.SingleLayerData' [package "raster"] with 13 slots
          @ min       : num 0
          @ max       : num 65535
          @ band      : int 1
    @ history : list()
    @ title   : chr(0) 
    @ extent  :Formal class 'Extent' [package "raster"] with 4 slots
          @ xmin: num 655781
          @ xmax: num 666701
          @ ymin: num 4071522
          @ ymax: num 4084598
    @ rotated : logi FALSE
    @ rotation:Formal class '.Rotation' [package "raster"] with 2 slots
          @ geotrans: num(0) 
          @ transfun:function ()  
    @ ncols   : int 5460
    @ nrows   : int 6538
    @ crs     :Formal class 'CRS' [package "sp"] with 1 slots
          @ projargs: chr "+proj=utm +zone=32 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0"
    @ z       : list()
    

    我想将单个变量中的每个带作为RasterLayer。因此,我会得到4个具有1个波段的RasterLayers。我该如何使用R?

    2 回复  |  直到 12 年前
        1
  •  10
  •   Robert Hijmans    12 年前

    文件名为f(此处使用示例文件进行再现)

     f <- system.file("external/rlogo.grd", package="raster")
    

    对于特定的乐队,你可以

     r <- raster(f, band=2)
    

    或适用于所有乐队

     b <- brick(f)
    

    或者(效率较低):

     s <- stack(f)
    
        2
  •  -1
  •   Simon O'Hanlon    12 年前

    您应该能够做到:

    f <- "/media/karimdion/Passport/Essais/po_3804017_bgrn_0000000 tif"
    rx<-raster(f)
    for( i in 1:rx@file@nbands ){
      assign( paste("rx" , i , sep = "." , raster(f, band=i)
    }
    

    这应该给你四个文件, rx.1 , rx.2 , rx.3 , rx.4 ,光栅文件的每个波段一个。我确信有一种更好(更高效、更正确的“光栅”)的方法可以做到这一点,但我现在已经记不清了。