R - 获取 RasterLayer 的特定波段

3

我有一张带有4个波段的光栅图层:

    >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个回答

10

使用文件名f(这里使用一个示例文件以便重现)

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

对于特定的乐队,您可以执行以下操作:

 r <- raster(f, band=2)

或者适用于所有频段

 b <- brick(f)

或者(不太高效的方法):

 s <- stack(f)

-1

你应该能够做到:

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.1rx.2rx.3rx.4,每个文件对应栅格文件的一个波段。我相信有更好(更高效和正确的“栅格”)的方法来完成这个任务,但我现在想不起来了。


@KarimGhariani 我会尝试!你也看到我对于多边形边缘光栅化的另一个问题的回答了吗? - Simon O'Hanlon

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