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

如何在R中按species分组生成动态Alpha Hull多边形

按物种分组生成动态Alpha Hull解决方案

问题背景

现有包含多物种的点位数据,已实现单个物种的动态Alpha Hull生成,但需要自动化处理200+物种,按species列分组生成各自的Alpha多边形。

解决方案核心思路

利用dplyr的分组工具结合purrr的批量映射函数,将单物种Alpha Hull生成逻辑封装为函数,批量处理每个物种分组,最终合并所有结果并可视化。

步骤1:修正依赖包并封装处理函数

先修正拼写错误(tidiverse应为tidyverse),再封装单物种处理函数,确保结果保留物种标识:

library(sf)
library(tidyverse)
library(mapview)
library(ggplot2)
library(rnaturalearth)
library(rangeBuilder)

# 封装单物种Alpha Hull处理函数
generate_alpha_hull <- function(species_data) {
  # 生成动态Alpha Hull
  ah_dyna <- getDynamicAlphaHull(
    species_data,
    coordHeaders = c("decimalLon", "decimalLat"),
    fraction = 0.90,
    partCount = 1,
    initialAlpha = 1,
    alphaIncrement = 0.3,
    alphaCap = 1000,
    clipToCoast = "terrestrial"
  )
  
  # 转换为sf对象并添加species列
  alpha_sf <- st_make_valid(st_as_sf(ah_dyna[[1]])) %>%
    mutate(species = unique(species_data$species))
  
  return(alpha_sf)
}

步骤2:批量处理所有物种

通过分组嵌套+批量映射,自动处理每个物种的点位数据:

# 按物种分组并批量生成Alpha Hull
all_alpha_hulls <- df %>%
  group_nest(species) %>%
  mutate(alpha_hull = map(data, generate_alpha_hull)) %>%
  unnest(alpha_hull) %>%
  select(-data) %>%
  st_as_sf()

步骤3:可视化所有物种的Alpha Hull

将所有物种的Alpha Hull叠加在地图上,按物种区分颜色:

# 加载墨西哥地图
wrld <- ne_countries(scale = "small", returnclass = "sf")
mexico <- filter(wrld, name == "Mexico")

# 绘制结果
ggplot() +
  geom_sf(data = mexico, fill = "gray90") +
  geom_sf(data = all_alpha_hulls, aes(fill = species), alpha = 0.6) +
  scale_fill_brewer(palette = "Set1") +
  theme_minimal() +
  labs(title = "各物种动态Alpha Hull分布", fill = "物种")

关键说明

  • group_nest将每个物种的点位数据嵌套为列表列,为批量处理提供便利
  • map函数遍历每个物种数据集,调用封装函数生成对应Alpha Hull
  • 最终结果为包含所有物种Alpha Hull的sf对象,支持后续空间分析或导出

内容的提问来源于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.04 16:10:28