有没有一种方法可以从多个栅格堆栈中写入单波段栅格

时间:2020-04-15 21:05:31

标签: for-loop raster

我有4个子文件夹,其中包含5个具有连续值的栅格。因此,使用“ for”函数构建一个循环:

  1. 列出这些栅格文件
  2. 每个文件夹堆叠这些文件,即4个栅格堆叠对象(包含5个栅格)
  3. 我使用一个阈值将连续栅格转换为二进制栅格
  4. 最后,我使用wirte.raster函数编写了二进制栅格。

我的问题在步骤4中。尽管我在writeRaster函数中使用了参数“ byLayer = T” 保存的栅格是带有5个二进制栅格的栅格堆栈。而且我想按光栅,每个文件,每个波段写入

如果有人给我任何见解,我真的很感激

setwd("Vole_raw_mean_Present/")

sub <- list.dirs(full.names=FALSE, recursive=FALSE)

for(j in 1:length(sub)) {
  print(sub[j])

  h <- list.files(path=sub[j], recursive=TRUE, full.names=TRUE,  pattern='.tif')
  print(h)

  stack_present <- stack(h)
  print(stack_present)

  binary_0.2 <- stack_present >=0.2

  writeRaster(binary_0.2, filename=paste0(sub[j], bylayer = T, suffix = "_bin.tif"), overwrite=TRUE)

}

1 个答案:

答案 0 :(得分:0)

这是错误的,因为参数“ bylayer”由于成为文件名的一部分而丢失了)

 writeRaster(binary_0.2, filename=paste0(sub[j], bylayer = T, suffix = "_bin.tif"), overwrite=TRUE)

应该是这样的(分两步来完成)

 f <- paste0(sub[j], "bin.tif")
 writeRaster(binary_0.2, filename=f, bylayer=TRUE, overwrite=TRUE)

在这里说明

library(raster)
b <- brick(system.file("external/rlogo.grd", package="raster"))
dir.create("test")
setwd("test")
writeRaster(b, filename="abc.tif", bylayer=T)
list.files()
#[1] "abc_1.tif" "abc_2.tif" "abc_3.tif"

writeRaster(b, filename="bin.tif", bylayer=T, suffix = paste0("f", 1:3))
list.files(pattern="bin")
#[1] "bin_f1.tif" "bin_f2.tif" "bin_f3.tif"

或者,您可以遍历每个文件夹中的文件