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
逻辑说明
terra::near()函数用于快速筛选出指定距离内的空间要素对,distance参数对应原函数的zero值(地理坐标下单位为米,投影坐标下为对应单位)。- 通过遍历为距离阈值内的点分配组ID,确保距离相近的点归为同一组。
- 利用
duplicated()筛选出每组的唯一代表点,完成去重操作。
内容的提问来源于stack exchange,提问作者silasprincipe
相关产品推荐
相关产品推荐

