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

如何使用线条分割空间多边形并实现区域点数统计可视化?

用线分割多边形并统计区域内点数的实现方案

核心思路

借助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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:02:39