You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用terra::extract处理海量点与多层栅格堆栈时遇std::bad_alloc错误

terra::extract双线性插值时遭遇std::bad_alloc内存不足问题

对超过270万个点坐标,在包含2880层(每层仅100个像元)的SpatRaster堆栈上执行双线性terra::extract操作时,触发Error: std::bad_alloc错误,推测为内存不足导致。

曾尝试将堆栈转为列表后用lapply逐序处理,但基于前两层的基准测试,该方法耗时过长,因此寻求其他解决方案。原以为terra会自动分块处理,遂尝试调整内存参数,但未成功触发分块。

可复现代码

library(terra)
library(data.table)

r <- rast(nrow = 10, ncol = 11, ext = c(-130.3125, -109.6875, 45.625, 58.125), resolution = c(1.875, 1.25),  crs = "EPSG:4326")
r[] <- runif(n = ncell(r))
stk <- eval(parse(text = paste0("rast(list(", paste(rep("r", 2880), collapse = ", "), "))")))

xyz <- data.table(x = sample(seq(-130.3125, -109.6875, by = 0.0001), size = 2785518, replace = TRUE),
                  y = sample(seq(45.625, 58.1255, by = 0.00001), size = 2785518, replace = TRUE))

tester <- extract(stk, xyz, method = "bilinear") 
# Error: std::bad_alloc

内存参数调整尝试

尝试设置terraOptions(memmax = 0.1, memmin = 0.1)触发分块处理,但mem_info显示堆栈仍以单块加载,错误依旧:

> mem_info(stk)

------------------------
Memory (GB) 
------------------------
check threshold : 1 (memmin)
available       : 23.98
allowed (60%)   : 14.39
needed (n=1)    : 0
------------------------
proc in memory  : TRUE
nr chunks       : 1
------------------------
> terraOptions(memmax = 0.1, memmin = 0.1)
> mem_info(stk)

------------------------
Memory (GB) 
------------------------
check threshold : 0.1 (memmin)
available       : 0.1 (memmax)
allowed (60%)   : 0.06
needed (n=1)    : 0
------------------------
proc in memory  : TRUE
nr chunks       : 1
------------------------

尝试方案及更新

  • 更新1:参考建议尝试提取唯一像元位置再关联回所有点,但双线性提取结果与直接提取所有点不一致
  • 更新2:单图层测试确认上述差异,推测是点的权重影响双线性插值结果
  • 更新3:拆分SpatRaster分块处理的方案有效,但后续rbind合并表格时仍出现内存不足,此为非terra相关问题

内容的提问来源于stack exchange,提问作者Ceres

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 20:23:21