Terra 问题:SpatRaster 上的缓冲区返回随机结果,但从来不是期望的结果

问题描述 投票:0回答:1

我的 R 代码有问题。所以,我有一个 SpatRaster (我不允许提供),我想将其用作掩码。分辨率为5米,crs为EPSG:32632。范围约为10平方公里。所需形状的值均为 1,所有其他栅格值均为 NA。所以我想在形状周围创建一个 15 米的缓冲区,如示例所示。

我正在使用 R 4.3.1 和 RStudio,在 Markdown 中工作。 软件包terra版本1.7-55

library(terra)

# Load example file
r <- rast(system.file("ex/elev.tif", package="terra"))
r <- project(r, "EPSG:32632")
r <- ifel(r<400, NA, 1)

# Create buffer of 3 Pixels
b <- buffer(r, width = xres(r)*3)

# Show results
par(mfrow = c(1,2))
plot(r)
plot(b)

Plot without buffer and plot with buffer

结果最终得到一个光栅图像,其中光栅中的所有值都是 1。我尝试更改一些值,例如我将宽度更改为 150,然后缓冲区有时会根据需要工作,并且我得到 150m 的缓冲区(至少从视觉判断来看是合适的)。但有时 150 缓冲区也会返回全 TRUE 光栅图像。还没有其他宽度能够创造出具有视觉吸引力的结果。由于这似乎是随机发生的,我不知道该怎么做......

更新:在写这个问题的时候,我一次又一次愚蠢地运行代码(宽度为15),没有做任何改变,现在我得到了一个合适的结果。我暂时保护了它,但我仍然非常困惑,需要我的代码进行进一步复制。所以我仍然对这里的错误感兴趣..

更新 2:我添加了一个示例,但是如果没有实际数据集,我无法重现错误。在我的例子中,这段代码主要生成了一个仅包含值 1 的形状,没有任何 NA 或 0。但是一次又一次地运行代码最终修复了它。

更新3: 使用完全相同的代码仍然会出现该错误。我得到的结果看起来像这样,但是,该示例不会生成此错误..

Actual plot without buffer and with buffer

我真的不知道它有什么问题,因为相同的代码适用于示例。

谢谢您的问候!

r buffer terra
1个回答
0
投票

解决方案似乎是可用的 RAM。如果我在

gc()
之前运行
buffer()
,结果始终是所需的结果。我有 16GB RAM,当脚本中使用
buffer()
时,我使用的 RAM 接近 10GB。我不知道阈值,需要多少 RAM 才能使
buffer()
正常工作,但清理脚本中的各处似乎是个好主意 ^.^

感谢您的帮助!

© www.soinside.com 2019 - 2024. All rights reserved.