R:更改空间点叠加的栅格值

yPe*_*ane 3 r r-raster r-sp

考虑以下数据:

library(sp)  
library(raster)

# create raster
r <- matrix(c(1.8, 1.2, 1.8, 1.2, 2.5, 2.7, 8.5, 7, 2), 3,3)

r <- raster(r)
extent(r) <- c(45,46,54,55)
projection(r) <- "+proj=utm +zone=33 +ellps=GRS80 +units=m +no_defs"

# create points
coords <- data.frame(x = c(45.6, 45.2),
                     y = c(54.8, 54.2))

data <- data.frame(a = c(20,22), b = c(1.5, 2.5))
p <- SpatialPointsDataFrame(coords = coords,
                           data = data, 
                           proj4string = crs(r))

plot(r)
plot(p, add=TRUE)
Run Code Online (Sandbox Code Playgroud)

我有 2 个点,它们覆盖了 2 个栅格单元。我想用aSpatialPointsDataFrame的值替换这些栅格单元格值p。因此,我将 SpatialPointsDataFrame 转换为栅格:

p_ras <- rasterize(x = p, y = r, field = "a")
Run Code Online (Sandbox Code Playgroud)

如何更新的值r使用的那些p_ras,其中p_ras具有非空单元格值和位置分配值r

Rob*_*ans 5

您的示例数据

library(raster)
r <- raster(ncol=3, nrow=3, ext=extent(c(45,46,54,55)), crs = "+proj=utm +zone=33 +ellps=GRS80 +units=m")
values(r) <- c(1.8, 1.2, 1.8, 1.2, 2.5, 2.7, 8.5, 7, 2)
coords <- data.frame(x = c(45.6, 45.2), y = c(54.8, 54.2))
data <- data.frame(a = c(20,22), b = c(1.5, 2.5))
p <- SpatialPointsDataFrame(coords = coords, data = data, proj4string = crs(r))
Run Code Online (Sandbox Code Playgroud)

你在正确的轨道上rasterize。只需添加参数update=TRUE

x <- rasterize(p, r, field="a", update=TRUE)
Run Code Online (Sandbox Code Playgroud)

那相当于

p_ras <- rasterize(p, r, field = "a")
p_ras <- cover(p_ras, r)
Run Code Online (Sandbox Code Playgroud)

这应该比overlay. 这种方法xyFromCell对于大对象来说是有风险的,因为它可能会强制所有值进入内存。