重新采样的栅格值超出范围

时间:2018-01-22 17:36:54

标签: r raster

我想将高分辨率光栅重新采样为更粗糙的分辨率,但是这样的方式是为较粗糙的网格单元保留单元格的最大值。

由于R&#39}光栅包中的<connectionStrings> <add name="XXX" connectionString="Data Source=XXX;User ID=XXX;Password=XXX" /> </connectionStrings> 函数中没有fun参数,因此我将一个简单的自定义函数放在一起:

resample

基本上,我使用聚合,我可以提供自定义函数,以接近目标栅格,然后我使用resampleCustom <- function(r1, r2) { resRatio <- as.integer(res(r2) / res(r1)) ret <- aggregate(r1, fact = resRatio, fun = max) if (!compareRaster(ret, r2, stopiffalse = FALSE)) { ret <- resample(ret, r2, method = 'bilinear') } return(ret) } 来应用一些最终调整。

我将它应用于一个栅格,该栅格代表一种鱼类的投影分布(其中单元格值表示从0到1的适用性分数),奇怪的是生成的栅格的值大于最大值原始栅格中的值。

可以下载两个栅格herehere

resample

最大值是1.2,但是当双线性方法基本上应该采用单元格的平均值时,这怎么可能呢?我希望得到的栅格的所有值都在原始栅格值的范围内。

1 个答案:

答案 0 :(得分:2)

极值是针对栅格边缘的单元格,其中值是外推的,因为一侧没有邻居。这显示了这些值的位置:

x <- resampleCustom(sp, template)
a <- xyFromCell(x, which.max(x))
b <- xyFromCell(x, which.min(x))
plot(x)
points(a)
points(b)

plot(Which(x < 0))
plot(Which(round(x, 15) > 0))

要删除这些极端值,您可以使用raster::clamp

xc <- clamp(x, 0, 1) 

顺便说一句,你所做的,首先聚合然后重新取样,也是raster::resample内所做的。

根本问题在于您的高分辨率栅格数据与您正在寻找的低分辨率聚合不对齐。这表明你工作流程中的错误。避免此问题的最佳方法可能是使用与高分辨率栅格对齐的预测栅格数据进行栖息地适用性预测。当您将预测变量投影到+proj=cea时,您可能没有考虑到这一点?

相关问题