簡體   English   中英

如何使用柵格對象中的值來創建圖層?

[英]How to use values in a raster object to create layers?

我有一個在每個單元格中包含不同值的柵格對象,如下例所示:

library(raster)
x <- matrix(1:5,nrow = 5, ncol = 1)
r <- raster(x)
plot(r)

r
> r
class      : RasterLayer 
dimensions : 5, 1, 5  (nrow, ncol, ncell)
resolution : 1, 0.2  (x, y)
extent     : 0, 1, 0, 1  (xmin, xmax, ymin, ymax)
crs        : NA 
source     : memory
names      : layer 
values     : 1, 5  (min, max)

帶有一層的繪制柵格

我想知道是否有一種簡單的方法可以根據柵格的值創建新圖層,同時保留其空間結構。

我在下面的示例中設法手動執行此操作,但我認為如果您有多個值要轉換為圖層,這不是一種有效的方法。

l1 <- r
l2 <- r
l3 <- r
l4 <- r
l5 <- r

values(l1)[which(values(r)!=1)] <- 0
values(l2)[which(values(r)!=2)] <- 0
values(l3)[which(values(r)!=3)] <- 0
values(l4)[which(values(r)!=4)] <- 0
values(l5)[which(values(r)!=5)] <- 0

r1 <- stack(l1,l2,l3,l4,l5)
plot(r1)

r1
> r1
class      : RasterStack 
dimensions : 5, 1, 5, 5  (nrow, ncol, ncell, nlayers)
resolution : 1, 0.2  (x, y)
extent     : 0, 1, 0, 1  (xmin, xmax, ymin, ymax)
crs        : NA 
names      : layer.1, layer.2, layer.3, layer.4, layer.5 
min values :       0,       0,       0,       0,       0 
max values :       1,       2,       3,       4,       5 

具有分層值的柵格

任何幫助表示贊賞!

謝謝

是的,您可以在一行中實現:

r1 <- stack(lapply(unique(r[]), function(i) {r[r[] != i] <- 0; r;}))

以便

plot(r1)

在此處輸入圖片說明

有一個方法

x <- layerize(r)

但如下所示,層數為0 / 1 (FALSE/TRUE)。

x
# (...)
#names      : X1, X2, X3, X4, X5 
#min values :  0,  0,  0,  0,  0 
#max values :  1,  1,  1,  1,  1 

要取回原始數字,您可以這樣做

x <- layerize(r) * unique(r) 

或者也許更明確

u <- unique(r)
x <- layerize(r, classes=u) * u 

x
# (...)
#names      : X1, X2, X3, X4, X5 
#min values :  0,  0,  0,  0,  0 
#max values :  1,  2,  3,  4,  5 

暫無
暫無

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

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