簡體   English   中英

n個柵格圖層的堆棧{柵格}

[英]stack{raster} of n Raster Layers

我有一個關於stack()柵格圖層的問題。

通常我像這樣stack()柵格圖層:

stack(RasterLayer1,RasterLayer2,RasterLayer3) # e.g. for 3 Layers

我的問題是,如何在不鍵入每個柵格圖層的情況下stack()柵格圖層?

例如: n是光柵圖層的數量(例如12),全部都是band

我創建了n-Raster圖層,現在我想要堆疊所有圖層而不鍵入n次光柵圖層的名稱。 所以不要輸入:

stack(band1,band2,band3,band4,band5,band6,band7,band8,band9,band10,band11,band12)

我希望通過stack(band[n])將其縮短,但這不起作用。

如果我創建一個包含所有波段的列表,我就無法堆疊該列表,因為它們不會出現在我的工作目錄中,因為我剛創建它們。

有人可以幫幫我嗎?

我建議不要將它們保存在像band1,band2等單獨的變量中,而是將它們存儲在列表中。 這是一個例子:

#Create empty rasters
ras1<- raster()
ras2<- raster()

#Initialise and append to list
list_ras <- list()
list_ras[[1]] <- ras1
list_ras[[2]] <- ras2

#Stack single bands
ras_stack <- stack(list_ras[[1]], list_ras[[2]])

#Stack all bands
ras_stack <- stack(list_ras)

如果您的數據位於目錄中,則可以使用搜索模式(例如:* .tif,* .grd,...)並將其存儲在變量中。

bands <- list.files(path=".",pattern="*.tif",full.names=TRUE,recursive=TRUE)

現在假設您的數據被調用:

band_01.tif
band_02.tif
band_03.tif
band_04.tif
band_05.tif
band_06.tif
band_07.tif

然后你可以堆疊例如:

data_stack <- stack(bands) #stack all data
data_stack <- stack(bands[1:3]) #stack 1,2 and 3 data
data_stack <- stack(bands[c(1,3,5,7)]) 

這是使用mget的另一種方法:

# Generate some data
library(raster)
r <- raster()
r[] <- runif(ncell(r))
for (i in 1:10) assign(paste0("r", i), r)

# create a stack      
stack(mget(ls(pattern = "^r.+")))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM