2013-05-09 47 views
1

我有以下問題,請。 我需要閱讀遞歸光柵圖像疊加並將它們存儲在不同名稱的文件(例如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

你想,堆積在一個多layerd光柵300個圖像的另一種方法? – JEquihua 2013-05-10 17:07:01

回答

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

你的問題是相當模糊的,如果你提供了一個完整的示例腳本,使得它可以更容易理解,將幫助。你說你需要閱讀幾個(可能不遞歸?)光柵圖像(大概是文件)並創建一個堆棧。然後你需要將它們存儲在不同名稱的文件中。這聽起來像將文件複製到具有不同名稱的新文件,並且有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 
1

感謝「JEquihua」,只需要addLayer即之前增加初始變量:

的(我在1 :沒有){

如果(潛艇(filez [I],4)== 「TIFF」){

圖像0​​- 柵格(filez [I])#填滿光柵堆僅與TIFF格式

 imagestack <- addLayer(imagestack,image) 

}

}

很遺憾 「RobertH」,我對R.新手我會問,更肯定或精確的下一次。

此外,任何關於從時間序列的MODIS圖像提取數據堆積的建議。或庫的示例:「rts()」,「ndvits()」或「bfast()」

對整個社區的問候。

+0

如果你喜歡我的回答,我可能會接受我的回答嗎? :)。我也在尋找bfast圖書館的例子,所以讓我知道你的搜索是否有幸運。有一個MODIS R包,它承諾一些非常酷的功能,但我還沒有能夠正確安裝它。它仍在開發中:http://stevemosher.wordpress.com/modis-for-r/ – JEquihua 2013-05-27 05:32:13

+0

親愛的「JEquihua」,我們在這裏提供幫助。 我有一些關於庫「bfast」的論文,我也在研究使用包「MODIS」(我在操作系統GNU/Linux Debian上安裝並正確運行)的可能性。另一方面,由於「MODIS」包依賴於「rgdal」,因此可能對您無法安裝的問題有所瞭解。 (這是在Linux中) 這是我的郵件發送給你的文件,[email protected] 來自祕魯的問候。 – Robles 2013-06-05 20:10:55

+0

此主題的更多信息(MODIS):https://r-forge.r-project.org/R/?group_id=1252 http://www.spatial-analyst.net/wiki/?title=Download_and_resampling_of_MODIS_images http://www.r-bloggers.com/modis-r-package-tutorial/ http://cran.r-project.org/web/packages/modiscloud/index.html – Robles 2013-06-05 20:14:47

1

堆疊

library(raster)  
list<-list.files("/PATH/of/DATA/",pattern="NDVI", 
      recursive=T,full.names=T) 
data_stack<-stack(list)