如何使用线条分割空间多边形并实现区域点数统计可视化?
用线分割多边形并统计区域内点数的实现方案
核心思路
借助sf库完成多边形分割、区域命名,通过空间关联统计区域内点数,最终按点数填充颜色绘图,完全匹配你的需求。
完整代码实现
library(sf) # 1. 创建原始多边形与分割线(转为sf对象方便后续操作) poly <- st_polygon(list(rbind(c(0, 0), c(1, 0), c(1, 1), c(0, 1), c(0, 0)))) %>% st_sfc() %>% st_sf() line <- st_linestring(rbind(c(0.5, -0.5), c(0.5, 1.5))) %>% st_sfc() # 2. 分割多边形并提取子多边形,同时命名区域 poly_split <- st_split(poly, line) %>% st_collection_extract("POLYGON") %>% # 从几何集合中提取单个多边形 st_sf() %>% mutate(region_name = c("左侧区域", "右侧区域")) # 自定义区域名称 # 3. 生成模拟测试点(替换为你的实际点数据即可) set.seed(123) points <- st_sample(poly, size = 50) %>% st_sf() # 4. 统计每个区域内的点数 poly_split$point_count <- lengths(st_intersects(poly_split, points)) # 5. 按区域内点数填充颜色绘图 plot(poly_split["point_count"], main = "区域点数填充可视化", key.pos = 1, pal = viridis::viridis(5)) # 用viridis配色提升可读性
关键细节说明
st_split是sf中分割几何对象的核心函数,分割后返回几何集合,必须用st_collection_extract提取出独立的多边形。st_intersects用于判断点与区域的空间包含关系,lengths()可以直接统计每个区域对应的点数。- 若要用
terra库实现,逻辑一致:用terra::split()分割多边形,再用terra::extract()完成点数统计。
内容的提问来源于stack exchange,提问作者aczich
相关产品推荐
相关产品推荐

