考虑以下数据:
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?
您的示例数据
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对于大对象来说是有风险的,因为它可能会强制所有值进入内存。