繁体   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