【问题标题】:Is there an R equivalent of GRASS GIS's r.neighbors range?是否有相当于 GRASS GIS 的 r.neighbors 范围的 R?
【发布时间】:2021-07-17 07:14:13
【问题描述】:

使用这些参数在 QGIS GRASS r.neighbors 函数中出现了数千个 DEM geotiff 错误

GRASS r.neighbors 邻域运算=范围,邻域大小=3

出现以下错误:-

2021-04-23T15:51:51     WARNING    Duplicate parameter coordinates registered for alg v.net.visibility

QGIS GRASS r.neighbors issue

我想在 R 中复制这个操作。

看起来只有内建的 focus() 函数是 mean()、var() 而不是 range()?并且输出栅格的确切范围与输入栅格范围不匹配,不像GRASS?

focal() 函数或一般的 R 中是否存在与 GRASS r.neighbors 邻域运算 = 范围、邻域大小 = 3 等效的矩阵表达式?

R focal function reference

【问题讨论】:

    标签: r raster qgis grass


    【解决方案1】:

    我假设“范围”是指焦点最小值和最大值之间的差异?你可以用(至少)两种方式计算它

    library(terra)
    f <- system.file("ex/elev.tif", package="terra")
    r <- rast(f)
     
    xmn <- focal(r, 3, min)
    xmx <- focal(r, 3, max)
    rng <- xmx - xmn
    

    或者像这样

    x <- focal(r, 3, function(i) diff(range(i)))
    

    存在 NA 的地方的结果略有不同。你可以使用na.rm=TRUE

    【讨论】:

    • 感谢您的提醒。我已经按原样尝试了这两种方法并出现此错误:- .local(x, ...) 中的错误:is.matrix(w) 不是 TRUE 是否有解决方法:- r_focal = focus(output_file, w = matrix (1, nrow = 3, ncol = 3), function(i) diff(range(i))) 只是仔细检查这会给你想要的相同输出吗? (我有一个额外的问题,我将在stackoverflow上发布,平铺栅格之间存在像素宽的间隙,看起来文件的原点已经移动了一个像素,输出文件不像输入文件那样彼此相邻,试过pad = TRUE + padValue=NA 没有运气
    • 您可能使用 RasterLayer 来指代焦点,而不是使用 SpatRaster(terra 焦点方法)。没有转移。您看到的可能是行变为 NA。否则show(x)您的输入和输出数据。
    • 使用 terra 方法仍然会发生这种情况 - ras() 和 writeRaster() (最外层像素被分配为 NA)任何其他想法如何解决这个问题?再次感谢您
    • 您可以使用 na.rm=T,或者使用其他填充值。否则,请提供一个简单的例子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 1970-01-01
    • 2021-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多