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

如何调整stars对象的aggregate()函数实现基于重叠面积的加权聚合?

实现stars对象基于重叠面积的加权均值聚合

默认的stars::aggregate()函数仅对相交的像素取简单平均值,要实现基于像素与目标cell重叠面积的加权均值聚合,需要手动计算重叠面积作为权重,具体步骤如下:

完整代码实现

library(stars)
library(sf)

# 原示例基础代码
gpoly <- st_sfc(st_polygon(list(rbind(c(0, 0), c(1, 0), c(1, 1), c(0, 1), c(0, 0)))))
grid1 <- st_sf(data.frame(x = 1:9), geometry = st_make_grid(gpoly, n = c(3, 3)))
grid2 <- st_make_grid(gpoly, n = c(2, 2))
st1 <- st_as_stars(grid1)

# 1. 将stars对象转换为sf格式,便于空间交集计算
sf1 <- st_as_sf(st1)

# 2. 计算每个grid1像素与grid2 cell的交集及对应面积
intersections <- st_intersection(sf1, st_sf(geometry = grid2))
intersections$overlap_area <- st_area(intersections)

# 3. 按grid2 cell分组计算加权均值
weighted_result <- aggregate(
  x ~ .geo_y, 
  data = intersections,
  FUN = function(vals) {
    group_weights <- intersections$overlap_area[intersections$.geo_y == unique(intersections$.geo_y)]
    sum(vals * group_weights) / sum(group_weights)
  }
)

# 4. 将聚合结果转回stars格式
st_weighted_agg <- st_as_stars(weighted_result, dims = "geometry")

# 查看最终加权聚合结果
st_weighted_agg

步骤解释

  1. 格式转换:将stars对象转为sf格式,利用sf的空间分析工具计算重叠面积。
  2. 交集面积计算:通过st_intersection获取所有grid1像素与grid2 cell的相交配对,再用st_area计算每个交集的面积,作为加权的权重。
  3. 加权均值计算:按grid2的cell分组,对每组内的像素值乘以对应重叠面积求和,再除以该组的总重叠面积,得到加权均值。
  4. 格式还原:将聚合后的sf对象转回stars格式,保持与原生aggregate()结果一致的数据结构。

结果差异说明

以示例中左下角的grid2 cell为例:

  • 简单平均结果为(1+2+4+5)/4 = 3
  • 加权均值结果约为2.333(基于各像素的实际重叠面积占比计算)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 22:10:05