发布
社区首页 >问答首页 >R:更改栅格值,其中空间点覆盖

R:更改栅格值,其中空间点覆盖
EN

Stack Overflow用户
提问于 2019-08-15 14:13:36
回答 2查看 1.1K关注 0票数 3

考虑以下数据:

代码语言:javascript
代码运行次数:0
复制
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)

我有两个点,覆盖两个栅格细胞。我想用a of SpatialPointsDataFrame p替换这些光栅单元格值。因此,我将SpatialPointsDataFrame转换为光栅:

代码语言:javascript
代码运行次数:0
复制
p_ras <- rasterize(x = p, y = r, field = "a")

如何使用r的值更新p_ras的值,其中p_ras有非空的单元格值,并按位置将值分配给r

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-15 17:39:46

您的示例数据

代码语言:javascript
代码运行次数:0
复制
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))

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

代码语言:javascript
代码运行次数:0
复制
x <- rasterize(p, r, field="a", update=TRUE)

这相当于

代码语言:javascript
代码运行次数:0
复制
p_ras <- rasterize(p, r, field = "a")
p_ras <- cover(p_ras, r)

这应该比overlay更清晰、更有效。对于大型对象来说,使用xyFromCell的方法是危险的,因为它可能会将所有值强制放入内存中。

票数 5
EN

Stack Overflow用户

发布于 2019-08-15 14:45:15

我通过研究这篇文章的答案找到了答案:https://gis.stackexchange.com/questions/95481/in-r-set-na-cells-in-one-raster-where-another-raster-has-values

我的解决方案是从overlay包中使用raster

代码语言:javascript
代码运行次数:0
复制
r_mod <- overlay(r, p_ras, fun = function(x, y){

  x[!is.na(y[])] <- y[!is.na(y[])]
  return(x)

})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57511013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档