2016-02-12 86 views
3

我有一个包含在单个stack中的栅格图层以及包含点坐标的SpatialPoints对象。如果单元格包含一个点,我试图将栅格图层的值更改为NA。如果单元格包含点,则将光栅单元格值更改为NA

我在下面提供了一个可重现的例子。然而,为了说明这一点,我的真实数据由10层“栖息地”(海拔,树冠覆盖等)组成,这些层都包含在堆栈中。 rasters覆盖面积约为34 x 26公里。另外,我有大约10,000个来自动物的GPS位置。

因此,对于可重复的例子。

library(raster) 
library(sp) 

提出三点rasters并结合成一个stack

set.seed(123) 
r1 <- raster(nrows=10, ncols=10) 
r1 <- setValues(r1, sample(c(1:50), 100, replace = T)) 

r2 <- raster(nrows=10, ncols=10) 
r2 <- setValues(r2, sample(c(40:50), 100, replace = T)) 

r3 <- raster(nrows=10, ncols=10) 
r3 <- setValues(r3, sample(c(50:55), 100, replace = T)) 

Stack <- stack(r1, r2, r3) 
nlayers(Stack) 

充分利用SpatialPoints

Pts <- SpatialPoints(data.frame(x = sample(-175:175, 50, replace = T), 
           y = sample(-75:75, 50, replace = T))) 

情节的栅格之一,点

plot(Stack[[2]]) 
plot(Pts, add = T) 

enter image description here

现在,是否可以更改每个包含至少一个指向NA的单元格的值?在stack上执行此操作会很好。

回答

4

我会用extract(),它可以被要求返回栅格单元的单元数目超过每个点在于:

​​

enter image description here

另外,可以使用rasterize(),虽然它对于非常大的栅格,可能(?)会变慢:

ii <- !is.na(rasterize(Pts, Stack)) 
Stack[ii] <- NA 
+0

很酷。很有帮助。是否有一个原因是你在'Stack'中编入了层'[[1]]'的索引?测试一下,似乎你可以一次对整个堆栈执行操作。例如'ii < - unique(extract(Stack,Pts,cellnumbers = TRUE)[,“cells”])' 'Stack [ii] < - NA' –

+0

@ B.Davis没有很好的理由,事实上, unique()'也不需要。我已编辑帖子以相应地简化。 –

相关问题