请问我有以下问题。 我需要读取递归光栅图像,堆叠并将它们存储在具有不同名称的文件中(例如name1.tiff,name2.tiff,...)
我尝试了以下内容:
for (i in 10) {
fn <- system.file ("external / test.grd", package = "raster")
fn <-stack (fn) # not sure if this idea can work.
fnSTACK[,, i] <-fn
}
此处需要以下形式的结果:
昏暗(fnSTACK)
[1] 115 80 10
或类似的东西
但它不起作用。
实际上,我有大约300张图片,我必须以不同的名字存储。 目的是提取时间序列信息(如果您知道其他方法或建议,我会很感激)
欢迎任何建议。提前感谢您的时间。
答案 0 :(得分:2)
我首先要做的是将所有* .tiff放在一个文件夹中。然后将所有名称读入列表。堆叠它们然后写一个多层栅格。我假设所有图像具有相同的范围和投影。
### Load necessary packages
library(tiff)
library(raster)
library(sp)
library(rgdal) #I cant recall what packages you might need so this is probably
library(grid) # overkill
library(car)
############ function extracts the last n characters from a string
############ without counting the last m
subs <- function(x, n=1,m=0){
substr(x, nchar(x)-n-m+1, nchar(x)-m)
}
setwd("your working directory path") # you set your wd to were all your images are
filez <- list.files() # creates a list with all the files in the wd
no <- length(filez) # amount of files found
imagestack <- stack() # you initialize your raster stack
for (i in 1:no){
if (subs(filez[i],4)=="tiff"){
image <- raster(filez[i]) # fill up raster stack with only the tiffs
imagestack <- addLayer(imagestack,image)
}
}
writeRaster(imagestack,filename="output path",options="INTERLEAVE=BAND",overwrite=TRUE)
# write stack
我没试过,但它应该有用。
答案 1 :(得分:1)
您的问题相当模糊,如果您提供了一个完整的示例脚本,以便更容易理解,那么它会有所帮助。你说你需要阅读几个(可能不是递归?)光栅图像(大概是文件)并创建一个堆栈。然后,您需要将它们存储在具有不同名称的文件中。这听起来像是将文件复制到具有不同名称的新文件,并且有R函数,但这可能不是您想要的。
如果您有一堆文件(具有完整路径名或在工作目录中),例如来自list.files()
f <- system.file ("external/test.grd", package = "raster")
ff <- rep(f, 10)
你可以做到
library(raster)
s <- stack(ff)
我假设你只需要这个堆栈用于R中的操作(它是一个对象,但不是一个文件)。您可以通过多种方式提取值(请参阅光栅包的帮助文件和插图)。如果你想要一个三维数组,你可以做
a <- as.array(s)
dim(a)
[1] 115 80 10
答案 2 :(得分:1)
感谢“ JEquihua ”的建议,只需要在addLayer之前添加初始变量,即:
for(i in 1:no){
if(subs(filez [i],4)==“tiff”){
image&lt; - raster(filez [i])#只用tiff填充光栅堆栈
imagestack <- addLayer(imagestack,image)
}
}
抱歉“ RobertH ”,我是关于R的新手。下次我会问,更确定或确切。
此外,任何建议从堆叠的MODIS图像的时间序列中提取数据。或者库的例子:“rts()”,“ndvits()”或“bfast()”
向整个社区致以问候。
答案 3 :(得分:1)
另一种堆叠方法
library(raster)
list<-list.files("/PATH/of/DATA/",pattern="NDVI",
recursive=T,full.names=T)
data_stack<-stack(list)