Есть ли способ написать однополосный растр из нескольких стеков растров? - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть 4 подпапки, которые содержат 5 растров с непрерывными значениями. Таким образом, сборка al oop с функцией "for" позволяет:

  1. перечислять эти растровые файлы
  2. складывать эти файлы в папку, то есть 4 объекта растровых стеков (которые содержат 5 растров)
  3. Я применил порог для преобразования непрерывного растра в двоичный растр
  4. Наконец, я написал двоичный растр с помощью функции wirte.raster.

Моя проблема в Шаг 4. Несмотря на то, что я использую аргумент "byLayer = T" в функции writeRaster, сохраненные растры были растровым стеком с 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 голосов
/ 16 апреля 2020

Это неправильно, потому что аргумент "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"

Кроме того, вы можете l oop над файлами в каждой папке

...