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

使用st_intersection后如何获取所有相交多边形的属性?

解决方案

针对你用st_intersection处理后得到的origins列,不需要复杂拆分再绑定,直接利用origins里的原始多边形索引,就能快速匹配并生成对应的属性列,下面是两种实用方法:

方法1:生成合并的属性字符串列

直接将每个相交区域对应的所有tree_type合并成一个字符串(比如oak, pine),两种实现方式可选:

基础R实现

# 生成合并的tree_type字符串
s_intersection$tree_types <- sapply(s_intersection$origins, function(idx) {
  paste(s$tree_type[idx], collapse = ", ")
})

# 可选:移除原来的origins列
s_intersection <- s_intersection[, !names(s_intersection) == "origins"]

tidyverse实现

library(dplyr)
library(purrr)

s_intersection <- s_intersection %>%
  mutate(tree_types = map_chr(origins, ~ paste(s$tree_type[.x], collapse = ", "))) %>%
  select(-origins)

方法2:拆分为多列属性

如果需要将每个参与相交的多边形属性单独列出来(比如tree_type_1、tree_type_2),可以用以下方式:

tidyverse自动适配实现

library(dplyr)
library(tidyr)
library(purrr)

s_intersection <- s_intersection %>%
  # 将每个origins索引转换为对应tree_type的小数据框
  mutate(tree_list = map(origins, ~ tibble(type = s$tree_type[.]))) %>%
  # 拆分为多列,自动根据最大相交数生成列名
  unnest_wider(tree_list, names_sep = "_") %>%
  # 移除原origins列
  select(-origins)

基础R固定列数实现

# 先找到最多有多少个多边形相交
max_intersect <- max(lengths(s_intersection$origins))

# 生成对应数量的属性列
for (i in 1:max_intersect) {
  col_name <- paste0("tree_type_", i)
  s_intersection[[col_name]] <- sapply(s_intersection$origins, function(idx) {
    if (length(idx) >= i) s$tree_type[idx[i]] else NA_character_
  })
}

# 移除origins列
s_intersection <- s_intersection[, !names(s_intersection) == "origins"]

完整示例流程

把生成数据、相交处理、属性匹配整合起来:

set.seed(131)
library(sf)
library(dplyr)
library(purrr)

# 创建模拟数据
m <- rbind(c(0,0), c(1,0), c(1,1), c(0,1), c(0,0))
p <- st_polygon(list(m))
n <- 20
l <- vector("list", n)
for (i in 1:n)
  l[[i]] <- p + 10 * runif(2)
s <- st_sfc(l)
s <- st_as_sf(s)
s$tree_type <- rep(c("oak", "pine", "fir"), length.out=nrow(s))

# 自相交操作
s_intersection <- st_intersection(s)

# 方法1:生成合并属性字符串
s_intersection <- s_intersection %>%
  mutate(tree_types = map_chr(origins, ~ paste(s$tree_type[.x], collapse = ", "))) %>%
  select(-origins)

# 查看结果
head(s_intersection)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 11:13:15