【问题标题】:Why does raster::extract return several values when using a buffer?为什么 raster::extract 在使用缓冲区时会返回多个值?
【发布时间】:2021-04-17 19:01:10
【问题描述】:

我正在尝试从基于点的栅格中提取值。当我运行这段代码时

library(raster)

raster::extract(my_raster, my_points, method='simple')

我得到每个点的一个栅格值。但是,当我尝试对缓冲区做同样的事情时

raster::extract(my_raster, my_points, method='simple', buffer=250)

每个点我得到几个值。我详细阅读了该函数的文档,但我不明白为什么在我的点周围绘制缓冲区时会得到多个栅格值,或者如何避免这种情况。

谢谢。

【问题讨论】:

  • 这是因为缓冲区中包含了更多像素,如果未指定 fun 参数,该函数将返回缓冲区中所有像素的值。例如,尝试在extract 调用中添加fun="mean",您将获得每个点的一个值,即缓冲区内每个像素的平均值。您可以将不同的函数传递给 fun 参数,也可以是自定义函数
  • 您好,非常感谢您的回复!当我将fun='mean' 放入我的函数时,我不断收到Error in fun(x) : could not find function "fun" 的错误。知道为什么会这样吗?谢谢!
  • 摘录文档:“如果 y 代表点,则 fun 仅在使用缓冲区时使用(因此每个空间特征将返回多个值)。”根据文档,该功能应该可以工作。请添加一个重现您的错误的示例,明天我可以尝试更好地帮助您。还提供有关您的数据(栅格和点)的更多信息

标签: r geospatial raster


【解决方案1】:

这是从?extract浓缩而来的

library(raster)
r <- raster(ncol=36, nrow=18, vals=1:(18*36))
xy <- cbind(-50, seq(-80, 80, by=20))

## no function 
extract(r, xy[1:3,], buffer=1000000)
#[[1]]
# [1] 586 587 588 589 590 591 592 593 620 621 622 623 624 625 626 627 628 629 630 631
#[[2]]
#[1] 517 518 552 553 554 555
#[[3]]
#[1] 445 446 481 482

## mean works
extract(r, xy[1:3,], buffer=1000000, fun=mean)
#[1] 611.1 541.5 463.5

## but "mean" fails
extract(r, xy[1:3,], buffer=1000000, fun="mean")
#Error in fun(x) : could not find function "fun"

【讨论】:

  • 哦 - 我犯了一个多么愚蠢的错误。非常感谢!
猜你喜欢
  • 2014-12-03
  • 2021-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-05
  • 2015-06-01
相关资源
最近更新 更多