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

如何基于幼龄林栅格,统计移动窗口内老龄林像元总数

问题:针对幼龄林像元统计周边老龄林数量的高效计算方法

需求说明

现有两个0/1栅格掩码:

  • 幼龄林存在/缺失栅格:值为1代表幼龄林像元,0代表非幼龄林区域
  • 老龄林存在/缺失栅格:值为1代表老龄林像元,0代表非老龄林区域

需实现:对每个幼龄林像元,在可调宽度(range)的移动窗口内统计老龄林像元的总数,最终输出一个仅在幼龄林像元位置存储对应统计值的栅格(非幼龄林位置可保持0或无值)。

现有尝试及问题

方法1:全局使用focal函数计算

直接对大尺寸老龄林栅格执行移动窗口求和,代码如下:

> mature_mask
class       : SpatRaster 
dimensions  : 31734, 16026, 1  (nrow, ncol, nlyr)
resolution  : 0.0002694946, 0.0002694946  (x, y)
extent      : -48.31876, -43.99984, -3.282444, 5.269697  (xmin, xmax, ymin, ymax)
coord. ref. : lon/lat WGS 84 (EPSG:4326) 
source(s)   : memory
name        : classification_2019 
min value   :                   0 
max value   :                   1 

range <- 21
mature_sum <- focal(mature_mask, range, sum, na.rm = TRUE) # 全局移动窗口求和
  • 问题:计算效率极差,窗口大小为21时运行耗时约7分钟;窗口增大至101时直接触发内存不足错误(bad::alloc),无法完成计算。

方法2:通过buffer裁剪计算范围

考虑到两个栅格均为稀疏栅格,尝试先获取幼龄林周边区域,再掩码老龄林栅格以缩小计算范围,测试代码如下:

rm <- matrix(0, 6, 6)
young <- rast(rm)
young[1] <- 1
young[15] <- 1

old <- rast(rm)
old[2] <- 1
old[16] <- 1
old[14] <- 1

young_surroundings <- buffer(young, 20) # 生成幼龄林周边缓冲区
  • 问题:buffer操作同样耗时,未能有效提升计算效率。

期望输出

得到old_sum栅格,仅在幼龄林像元位置存储对应窗口内的老龄林像元总数,示例如下:

old_sum <- young
old_sum[1] <- 1  # 该幼龄林像元窗口内有1个老龄林像元
old_sum[15] <- 2 # 该幼龄林像元窗口内有2个老龄林像元

内容的提问来源于stack exchange,提问作者Ana Catarina Vitorino

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 16:13:11