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

R中使用terra包聚合细栅格为1值占比粗分辨率栅格方法

R terra包实现二值(1/NA)栅格聚合为占比栅格

你的原始栅格为100m分辨率,目标10km分辨率对应聚合因子为10000/100 = 100,即每个粗分辨率像元覆盖100*100个原始细分辨率像元。由于原始像元仅存在1(有效值)和NA(无值/非目标区)两类取值,要计算聚合后每个像元内值为1的像元占比,可按以下方法实现:

核心实现代码

library(terra)

# 1. 预处理:将原始栅格的NA替换为0,此时栅格取值仅为0和1
r1_binary <- subst(raster1, NA, 0)

# 2. 聚合计算,聚合因子设为100,聚合函数取均值即为1的占比
# 均值计算逻辑:窗口内所有值求和 / 窗口总像元数 = 1的个数 / 总像元数 = 1的占比
r_10km <- aggregate(r1_binary, fact = 100, fun = mean, na.rm = FALSE)

常见踩坑提示

不要直接对原始含NA的栅格使用aggregate(..., fun = mean, na.rm = TRUE)计算:该参数会将NA排除在统计分母外,例如窗口内仅存在1个1、其余9999个都是NA时,计算结果会返回1,完全不符合占比计算逻辑。

格网对齐修正(可选)

如果聚合后栅格和你需要的标准10km格网范围不对齐,可先创建目标分辨率模板栅格,再通过重采样保证对齐:

# 生成和原始栅格坐标系、范围一致的10km分辨率模板
template_10km <- rast(ext(raster1), res = 10000, crs = crs(raster1))
# 以平均值方法重采样得到对齐后的占比栅格
r_10km_aligned <- resample(r1_binary, template_10km, method = "average")

结果说明

最终输出栅格的像元值范围为0-1:

  • 值为1:对应10km格网内全部是原始值为1的像元
  • 值为0:对应10km格网内没有原始值为1的像元
  • 0-1之间的数值:对应格网内值为1的像元占比

原始栅格示意图

原始栅格参数

raster1
class       : SpatRaster 
dimensions  : 33301, 32538, 1  (nrow, ncol, nlyr)
resolution  : 100, 100  (x, y)
extent      : 7590450, 10844250, 902100, 4232200  (xmin, xmax, ymin, ymax)
coord. ref. : WGS 84 / Pseudo-Mercator (EPSG:3857) 
source      : spat_PDvNPPxCooNIh09_2584.tif 
name        : pred 
min value   :    1 
max value   :    1 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:27:26