如何在堆叠栅格数据后编写它们?

5

我想要操作几个光栅文件,然后重新写入它们。

rasterfiles   <- list.files("C:\\data", "*.envi", full.names = TRUE)
d1 <-  overlay(stack(rasterfiles ), 
               fun=function(x) movingFun(x, fun=mean, n=3, na.rm=TRUE))
d2=unstack(d1)

我很感激任何有关于如何编写d2(光栅)的想法。


你可以尝试在?writeFormats中提到的任意一种格式。 - Roman Luštrik
我猜这只是一个虚拟的例子,但你不能使用以整数开头的名称来调用变量,否则会抛出错误“在“10rasterfiles”中出现意外符号”。 - plannapus
2个回答

10
 writeRaster(d1, file="d1.nc") #other file formats such as .envi work as well

因为d1是单个光栅而不是光栅列表,所以才有效:实际上,overlay的结果是一个单独的光栅(参见?overlay)。
此外,stack的概念确切地是将多个具有单个图层的光栅合并成一个具有多个图层的光栅。
最终,如果您真的想将每个图层分别保存,可以在写入之前使用unstack将光栅解压缩。
这种情况下:

d2 <- unstack(d1)
outputnames <- paste(seq_along(d2), ".nc",sep="")
for(i in seq_along(d2)){writeRaster(d2[[i]], file=outputnames[i])}

1
overlay的结果是一个单一的栅格: 请参阅?overlay。此外,您堆叠了多个栅格,这意味着从几个具有单个图层的栅格中,您制作了一个具有多个图层的单一栅格。 - plannapus
plannapus - 你应该把你的评论融入到答案中。我认为这是重要的一点 :-) - Carl Witthoft
unstack(d1)会给你一个RasterLayers列表,你可以使用writeRaster(使用最新版本的raster包2.0-41)将其分别写入文件。 - plannapus
这意味着当前目录中已经存在一个同名文件。因此,您可以使用不同的名称保存它,将其保存到另一个目录中,或者使用参数 overwrite=TRUE 覆盖它(例如 for(i in seq_along(d2)){writeRaster(d2[[i]], file=outputnames[i], overwrite=TRUE)})。 - plannapus
1
你只需要将你的路径添加到 outputnames 中。例如:outputnames <- paste("C:\\whateverpathyouwant\\", seq_along(d2), ".nc",sep="")。这只是一个例子:我不知道你的电脑上存储了什么东西,你想在哪里存储或调用文件。你只需要在某个时候以某种方式输入要写入的文件(带路径)的名称到 writeRaster 中即可。 - plannapus

8

Plannapus方案应该可以工作。或者,您可以一步将内容写入单个文件中:

 rasterfiles   <- list.files("C:\\data", "*.envi", full.names = TRUE)
 d1 <-  overlay(stack(rasterfiles ), 
           fun=function(x) movingFun(x, fun=mean, n=3, na.rm=TRUE), 
           filename='output.tif' )

或者分为两步对多个文件进行操作。
 rasterfiles   <- list.files("C:\\data", "*.envi", full.names = TRUE)
 d1 <-  overlay(stack(rasterfiles ), 
           fun=function(x) movingFun(x, fun=mean, n=3, na.rm=TRUE))
 d2 <- writeRaster(d1, 'out.tif', bylayer=TRUE)

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