【问题标题】:R focal (raster package) function that calculates relative to center cell of moving window相对于移动窗口的中心单元计算的 R 焦点(光栅包)函数
【发布时间】:2014-07-26 22:30:04
【问题描述】:

我有一个大型栅格数据集(实际上有几个)。我正在寻找 R 的移动窗口进程(如光栅包中的“焦点”)。然而,应用于窗口的函数需要相对于所述窗口的中心单元进行计算。

举个简单的例子,我想要一个移动窗口函数,它告诉我窗口中有多少单元格在窗口中心单元格的某个值“d”内。我怀疑我可以通过简单地查询中心单元格的值并在其周围编写一个函数以在焦点()中使用来轻松做到这一点。但是,我不确定如何查询窗口的中心单元格。

如果可能的话,那么我最终需要根据另一个完全重叠的栅格(可能是堆栈或其他东西)中的中心单元的值在一个栅格上运行此函数。

我对光栅工作很满意,但对 R 中 {raster} 包中的 focus() 命令不太熟悉。希望有人能提供一些信息。

【问题讨论】:

  • 您是否介意提供有关“窗口中有多少单元格在窗口中心单元格的某个值 'd' 范围内”的更多详细信息?到目前为止你做了什么?
  • 抱歉 Paulo,我不是故意含糊其辞。我只是把这个例子作为一个非常简单的计算,可以在焦点窗口的中心单元周围完成。实际上,我需要引入一个更复杂的函数,但这似乎无关紧要。
  • 调整焦点函数以从另一个 rasterLayer 读取参考“d”数据可能很容易。

标签: r raster


【解决方案1】:
library(raster)
# taking a 4x5 matrix as a simple example.
x <- matrix(1:20, 4)
> x
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    5    9   13   17
[2,]    2    6   10   14   18
[3,]    3    7   11   15   19
[4,]    4    8   12   16   20
# convert it to a rasterLayer
r <- raster(x)
d <- 15 # a value to use as reference with the function
# a criterion function to apply with focal (moving window)
f.rast <- function(x) length(x[x>d]) 
# apply the function to a 3x3 moving window
aggr <- as.matrix(focal(r, matrix(1,3,3), f.rast, pad = T, padValue = 0))
> aggr
     [,1] [,2] [,3] [,4] [,5]
[1,]    0    0    0    2    2
[2,]    0    0    0    3    3
[3,]    0    0    1    4    4
[4,]    0    0    1    3    3

现在我认为这是了解您的过滤器“d”的问题。

【讨论】:

    猜你喜欢
    • 2018-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2019-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多