使用空间多边形更改栅格值

lok*_*oki 6 plot r raster spatial r-raster

要更改下的栅格值,SpatialPoints您只需使用[.

r <- raster(system.file("external/test.grd", package="raster"))
rTp <- rasterToPoints(r, spatial = T)

set.seed(666)
rTpS <- rTp[sample(1:length(rTp), 500),]
plot(r)
plot(rTpS, add = TRUE, pch = ".")
Run Code Online (Sandbox Code Playgroud)

现在,空间点下方的栅格值更改如下:

r1 <- r
r1[rTpS] <- 99999
plot(r1)
Run Code Online (Sandbox Code Playgroud)

带有 SpatialPoints 的栅格(左)和具有更改值的栅格(右): 具有空间点的栅格(左)和具有更改值的栅格(右)

因此,我假设多边形的工作方式相同。因此,从此栅格数据集生成一些多边形:

rst <- as.integer(stretch(r, 0, 10))
rTpol <- rasterToPolygons(rst, dissolve = T)
rTpol <- rTpol[rTpol$layer > 3,]

plot(r)
plot(rTpol, add = T)

rst[rTpol[,]] <- 100
plot(rst)

# also tried 
# rst[rTpol] <- 100
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试将栅格值更改为低于某个值时SpatialPolygons,不知何故更改了多边形的 ID(或其他值)。然而,它应该是100。

带有 SpatialPolygons 的栅格(左)和值发生奇怪变化的栅格(右): 带有 SpatialPolygons 的栅格(左)和值发生奇怪变化的栅格(右)

因此,我的问题是如何更改多边形内的栅格值。

lok*_*oki 7

编辑(两年后):

正如 Hijmans 先生在评论中所承诺的那样,此问题已得到修复。
感谢您提供这种简单、出色且方便的地理数据处理方式!

原答案:

最后,我自己找到了答案。

该功能rasterize()有助于解决这个问题。

r <- raster(system.file("external/test.grd", package="raster"))
rst <- as.integer(stretch(r, 0, 10))
plot(rst)
rTpol <- rasterToPolygons(rst, dissolve = TRUE)
rTpol <- rTpol[rTpol$layer > 3,]
plot(rTpol)

rpol <- rasterize(rTpol, rst, field = 100, update = TRUE)
plot(rpol)
Run Code Online (Sandbox Code Playgroud)

rasterize()field =值放入从多边形生成的栅格单元格中,同时update = TRUE获取栅格并使用字段值更新与多边形相对应的所有单元格。

结果如下: 在此输入图像描述

  • 这是一个很好的解决方案,但您最初的解决方案更优雅——并且应该有效。此错误已在(即将发布的)光栅版本 2.5-16 中修复 (2认同)