r - 如何在 R 中使用 terra 包编写栅格 bylayer?

标签 r r-raster terra

我想使用 terra 包逐层写入栅格。我正在使用以下代码

library(terra)

# first create a raster
r1 <- r2 <- r3 <- rast(nrow=10, ncol=10)
# Assign random cell values
values(r1) <- runif(ncell(r1))
values(r2) <- runif(ncell(r2))
values(r3) <- runif(ncell(r3))
s <- c(r1, r2, r3)
s
plot(s)

writeRaster(s, names(s), overwrite=TRUE)

它给了我以下错误

Error: [writeRaster] cannot open file: C:/Users/nn/Desktop/lyr.1 In addition: Warning message: C:/Users/nn/Desktop/lyr.1: No such file or directory (GDAL error 4)

我想使用以下函数在 raster 包中提供相同的输出

raster::writeRaster(s, names(s), bylayer=TRUE, format='GTiff', overwrite=TRUE)

最佳答案

你还需要多做一些工作

dir.create("test")
setwd("test")
f <- paste0("test", 1:nlyr(s), ".tif")
r <- writeRaster(s, f, overwrite=TRUE)
list.files()
# [1] "test1.tif" "test2.tif" "test3.tif"

r
#class       : SpatRaster 
#dimensions  : 10, 10, 3  (nrow, ncol, nlyr)
#resolution  : 36, 18  (x, y)
#extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
#coord. ref. : +proj=longlat +datum=WGS84 +no_defs 
#sources     : test1.tif  
#              test2.tif  
#              test3.tif  
#names       :      lyr.1,      lyr.1,      lyr.1 
#min values  : 0.02075680, 0.01058152, 0.02179740 
#max values  :  0.9874134,  0.9990475,  0.9883418 

这也有效:

names(s) <- c("a", "b", "c")
x <- writeRaster(s, names(s), overwrite=TRUE, filetype="GTiff")

但请注意文件名没有 tif 扩展名

sources(x)
#    source nlyr
#1 ./test/a    1
#2 ./test/b    1
#3 ./test/c    1

所以我会做

z <- writeRaster(s, paste0(names(s), ".tif"), overwrite=TRUE)

#class       : SpatRaster 
#dimensions  : 10, 10, 3  (nrow, ncol, nlyr)
#resolution  : 36, 18  (x, y)
#extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
#coord. ref. : +proj=longlat +datum=WGS84 +no_defs 
#sources     : a.tif  
#              b.tif  
#              c.tif  
#names       :          a,          b,          c 
#min values  : 0.02075680, 0.01058152, 0.02179740 
#max values  :  0.9874134,  0.9990475,  0.9883418 

现在改进了错误消息(参见 this issue)

关于r - 如何在 R 中使用 terra 包编写栅格 bylayer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68253507/

相关文章:

栅格化 sf 点的栅格输出与点不对齐

r - 如何从 R 中的 geoTIFF 获取像素值?

r - 使用 raster 包的空间相关图

r - 在 terra SpatRaster 中命名分类级别时,如何防止添加额外级别?

r - ggplot2 点之间的垂直线

r - 以相等的间隔对数据帧中的组中的数据进行分箱的更好方法

r - Beamer 演示 RStudio 更改 block 的字体大小

r - 将 mutate_at 与 contains 结合使用以在多列上应用函数

r - 如何使用 terra 复制此光栅脚本(特别是与掩模功能作斗争)?

r - 如何聚合分类 SpatRaster