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

如何在R语言中计算Voronoi单元周长并保存至Shapefile?

计算分类Voronoi单元周长并保存为Shapefile的正确实现

问题场景

已生成包含红、蓝两类点的数据集,通过ggvoronoi绘制了分类Voronoi单元,需要计算红、蓝两类单元的周长(含单个单元周长及颜色维度的总周长),并将结果保存到Shapefile中。

修正后的完整代码

# 1. 模拟生成两类点数据集
set.seed(123)

df1 <- data.frame(longitude = rnorm(100, 10, 1),
                  latitude = rnorm(100, 10, 1), color = "red")

df2 <- data.frame(longitude = rnorm(100, 8, 1),
                  latitude = rnorm(100, 8, 1), color = "blue")

df <- rbind(df1, df2)

# 2. 绘制分类Voronoi单元
library(ggvoronoi)
ggplot(df, aes(x = longitude, y = latitude, fill = color)) +
  geom_voronoi() +
  geom_point() +
  scale_fill_manual(values = c("red", "blue"))

# 3. 计算周长并保存为Shapefile
library(sf)

# 生成带原数据属性的Voronoi多边形(保留color列)
vor_spdf <- voronoi_polygon(data = df, x = "longitude", y = "latitude")

# 转换为sf格式对象
vor_sf <- st_as_sf(vor_spdf)

# 计算每个Voronoi单元的周长
vor_sf$perimeter <- st_length(vor_sf)

# 可选:按颜色汇总总周长
color_total_perimeter <- aggregate(perimeter ~ color, data = vor_sf, sum)
print(color_total_perimeter)

# 保存到Shapefile(delete_layer避免重复文件报错)
st_write(vor_sf, "voronoi_with_perimeter.shp", delete_layer = TRUE)

关键说明

  1. 属性关联:voronoi_polygon会保留原数据集的所有属性(包括color),因此每个Voronoi单元都能对应到所属的颜色类别。
  2. 周长计算:sf包的st_length()函数对多边形对象计算的就是其周长,直接赋值给新列即可完成单个单元的周长计算。
  3. 颜色维度汇总:通过aggregate()按color分组求和,可快速得到红、蓝两类单元的总周长。
  4. 冗余代码移除:原代码中的fortify_voronoi()是用于ggplot可视化的辅助函数,计算周长时无需调用,可直接移除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 17:17:44