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

Terra中是否有sp::remove.duplicates()的等效实现?支持距离去重

在Terra中替代sp::remove.duplicates()的实现方案

Terra目前没有直接对应sp::remove.duplicates()的内置函数,但可以通过terra::near()结合分组去重的方式,实现按指定距离移除重复点的功能,对应原函数的zero参数逻辑。

示例实现代码

library(terra)

# 构造示例数据
pts <- data.frame(
  longitude = c(-70.1234, -70.1240, -70.1300, -70.1400, -70.1250, -68),
  latitude = c(40.6789, 40.6780, 40.6760, 40.6750, 40.6770, 39)
)

# 转换为Terra的SpatVector对象
pts_terra <- vect(pts, geom = c("longitude", "latitude"))

# 找出所有距离≤2米的点对(地理坐标下默认单位为米)
dist_pairs <- near(pts_terra, pts_terra, distance = 2, pairwise = TRUE)

# 为距离阈值内的点分配同一组ID
group_ids <- rep(NA_integer_, nrow(pts_terra))
current_group <- 1

for (i in seq_along(group_ids)) {
  if (is.na(group_ids[i])) {
    # 获取当前点所属组的所有点索引
    group_members <- which(dist_pairs[, i])
    group_ids[group_members] <- current_group
    current_group <- current_group + 1
  }
}

# 按组保留唯一点(此处保留每组第一个点)
unduplicated_terra <- pts_terra[!duplicated(group_ids), ]

# 查看结果
unduplicated_terra

逻辑说明

  1. terra::near()函数用于快速筛选出指定距离内的空间要素对,distance参数对应原函数的zero值(地理坐标下单位为米,投影坐标下为对应单位)。
  2. 通过遍历为距离阈值内的点分配组ID,确保距离相近的点归为同一组。
  3. 利用duplicated()筛选出每组的唯一代表点,完成去重操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 23:42:22