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

如何基于概率条件合并重叠sf对象并保留最优记录

解决SF对象合并并保留重叠区域最高概率记录的方法

首先修正你提供的示例代码(补全缺失的管道符):

library(sf)
library(dplyr)

nc <- st_read(
  system.file("gpkg/nc.gpkg", package="sf"),
  quiet=TRUE
)
a <- nc %>%
  select(geom) %>%
  slice(1:60) %>%
  mutate(probability = runif(n=60, min=1, max=100),
         name = 'A')
b <- nc %>%
  select(geom) %>%
  slice(50:100) %>%
  mutate(probability = runif(n=51, min=1, max=100),
         name = 'B')

根据你的重叠场景,分两种情况处理:

场景1:重叠区域为完全相同的几何要素(如示例)

你的示例中,a和b的重叠部分是50-60行的相同几何对象,直接按几何分组筛选最高概率记录即可:

# 合并所有SF对象
combined <- bind_rows(a, b)

# 按几何分组,保留每组概率最高的记录
result <- combined %>%
  group_by(geom) %>%
  slice_max(probability, n=1, with_ties=FALSE) %>%
  ungroup()
  • slice_max用来快速筛选最大值记录,with_ties=FALSE确保每组只返回一条(若存在相同最大值,会随机选取,可额外添加排序字段控制选择逻辑)

场景2:重叠区域为空间相交的不同几何要素

如果是不同几何面空间重叠(非完全匹配),需要先拆分重叠区域再筛选:

# 合并所有SF对象
combined <- bind_rows(a, b)

# 拆分所有空间重叠的几何要素,保留原始属性
intersected <- st_intersection(combined)

# 按拆分后的新几何分组,筛选最高概率记录
result <- intersected %>%
  group_by(geom) %>%
  slice_max(probability, n=1, with_ties=FALSE) %>%
  ungroup()
  • st_intersection会将重叠的面拆分为独立的子面,确保每个空间区域只保留对应最高概率的记录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 06:01:01