问题描述
我想使用 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)
它给了我以下错误
错误:[writeraster] 无法打开文件:C:/Users/nn/Desktop/lyr.1 另外: 警告信息: C:/Users/nn/Desktop/lyr.1: 没有那个文件或目录(GDAL 错误 4)
raster::writeraster(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,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.9883418
开发版本现在提供更好的错误消息(参见 this issue)