按变量合并 st_voronoi 个多边形

merge st_voronoi polygons by variable

我想用 st_voronoi 创建多边形并通过变量合并它们

library(sf)
nc_centroids <- st_transform(nc_centroids,crs=32119)
nc_centroids$foo <- c(rep("green",50),rep("red",50))
nc <- st_transform(nc,crs=32119)
v <- st_voronoi(st_union(nc_centroids))
plot(v, col = 0)
plot(st_intersection(st_cast(v), st_union(nc)), col = 0) 
plot(nc_centroids, add = TRUE)

如何通过 nc_centroids$foo 合并 v 中的多边形来创建两个大多边形?我可以想到一些 hack,比如使用 lapply 来连接 v 的各个多边形,例如 (v[[1]][[x]])。但肯定有更简单的事情

请在下面找到详细说明一种可能方法的代表。

Reprex

  • 代码
library(sf)
library(dplyr)

nc <- st_read(system.file("shape/nc.shp", package="sf"))
nc_centroids <- st_centroid(nc)
nc_centroids <- st_transform(nc_centroids,crs=32119)
nc_centroids$foo <- c(rep("green",50),rep("red",50))
nc <- st_transform(nc,crs=32119)
v <- st_voronoi(st_union(nc_centroids))


v <- v %>% 
  st_collection_extract(., "POLYGON") %>% 
  st_as_sf()

v_result <- v %>% 
  st_join(., nc_centroids, st_intersects) %>% 
  group_by(foo) %>% 
  summarize()

nc_result <- nc %>% 
  st_join(., v_result) %>% 
  group_by(foo) %>% 
  summarize()
  • 输出
plot(nc_result)

reprex package (v2.0.1)

创建于 2022-02-07