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

如何用R的sf包按物种批量生成最小凸多边形并导出Shapefile

按物种批量生成最小凸多边形并导出Shapefile

问题说明

在R中使用sf包处理空间数据时,现有包含物种分布点的数据集,需要按species字段分组生成每个物种的最小凸多边形(通过st_convex_hull),同时要实现200个物种的自动化批量处理,并将结果导出为Shapefile格式。当前代码仅能生成所有点的单个凸多边形,无法分组处理。

解决方案代码

完整实现代码

# 加载所需包
library(sf)
library(tidyverse)
library(mapview)

# 创建示例数据集
lat <- c(15.53033,15.53033,15.5219,15.1739,19.08333,17.13333,18.09861,21.27667,25.54863,18.80907,25.54147,
        20.0605,23.299,25.5501,25.55005,25.54997)
lon <- c(-92.802,-92.802,-92.7997,-92.3361,-96.9667,-91.9333,-94.4297,-99.2117,-100.271,-99.2168,-100.272,-97.4713,
         -106.443,-100.27,-100.27,-100.27)
species <- c("Sp1", "Sp1","Sp1", "Sp1","Sp1", "Sp1","Sp1", "Sp2","Sp2","Sp2","Sp2","Sp2","Sp2","Sp2","Sp2","Sp2")
df <- data.frame(lat, lon, species)

# 转换为sf空间对象
df_sf <- df %>%
  sf::st_as_sf(coords = c("lon", "lat"), crs = "EPSG:4326")

# 按物种分组生成最小凸多边形
species_convex_hulls <- df_sf %>%
  dplyr::group_by(species) %>%
  dplyr::summarize(
    geometry = st_convex_hull(st_union(geometry))
  )

# 可视化结果
mapview::mapview(species_convex_hulls)

# 导出为Shapefile
sf::st_write(species_convex_hulls, "species_convex_hulls.shp", delete_layer = TRUE)

关键步骤说明

  • 分组处理:使用dplyr::group_by(species)按物种分组,再通过summarize结合st_union(geometry)合并同物种的所有点,最后用st_convex_hull生成该物种的最小凸多边形。
  • 批量处理:该逻辑无需修改即可直接处理200个物种的数据集,分组操作会自动遍历所有唯一物种。
  • 导出Shapefile:使用sf::st_write函数,delete_layer = TRUE参数用于覆盖已存在的同名文件(若需要)。

内容的提问来源于stack exchange,提问作者Álvaro Scuack

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 09:01:20