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

如何在Terra的SpatVector中查找重复几何图形?

查找Terra中SpatVector的重复几何图形

问题背景

在处理全球几何数据库时,存在部分重复的几何图形,这些图形的非几何属性列可能相同或不同(比如同一图形属于两个管辖机构,会出现两次且机构列不同)。作为Terra新手,尝试用类似sf的group_by(SHAPE)方法统计重复次数,但发现Terra的SpatVector无法直接访问SHAPE列进行分组。

可复现代码:

library(terra)
library(dplyr)
library(ggplot2)
library(tidyterra)

f <- system.file("ex/lux.shp", package="terra")
v <- vect(f)
v2 <- v %>%
  slice(1) %>%
  mutate(NAME_1 = "Diekirch1",
         NAME_2 = "Some other name")
# 手动复制一行并修改非几何列
v3 <- rbind(v, v2)

# 可视化重复图形
ggplot() +
  geom_spatvector(data = v3,
                  fill = "purple",
                  alpha = .5)

解决方案

方法1:直接标记重复几何

Terra内置了duplicatedGeom()函数,可直接识别重复的几何图形,返回逻辑向量标记哪些行是重复项:

# 给SpatVector添加重复标记列
v3$is_duplicate <- duplicatedGeom(v3, method = "equivalent")

# 查看所有重复的行
v3[v3$is_duplicate, ]
  • method = "equivalent":忽略顶点顺序、方向,只要几何形状完全一致即判定为重复(更符合实际需求);若选"identical"则要求顶点顺序和方向也完全相同。

方法2:统计每个几何的重复次数

如果需要统计每个几何的出现次数,可以结合geom_hash()生成几何的唯一哈希值(相同几何的哈希值一致),再进行分组统计:

# 生成几何哈希列
v3$geom_hash <- geom_hash(v3, method = "equivalent")

# 用dplyr统计重复次数并合并回原数据
v3_with_count <- v3 %>%
  as_tibble() %>%
  group_by(geom_hash) %>%
  add_count(name = "repeat_count") %>%
  right_join(v3, ., by = c(names(v3), "geom_hash"))

# 查看结果,repeat_count列即为对应几何的出现次数
head(v3_with_count)

或者用基础R的table()函数更简洁:

# 统计每个哈希值的出现次数
geom_counts <- table(geom_hash(v3, method = "equivalent"))

# 将计数匹配到原SpatVector
v3$repeat_count <- geom_counts[geom_hash(v3, method = "equivalent")]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 22:43:11