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

如何用R将df1经纬度转为sf边界框并统计df2中蛇的数量

问题解决步骤

错误原因

你之前的代码报错是因为st_as_sf()的coords参数仅用于创建点要素,只需要传入x、y两个坐标字段;而你传入了4个坐标字段,不符合函数的参数规则,因此触发错误。要生成矩形(多边形)sf对象,需要手动构造每个矩形的顶点并生成多边形几何。


完整实现代码

1. 加载所需包

library(sf)
library(dplyr)

2. 将df1转换为矩形多边形sf对象

每个矩形需要按西南→西北→东北→东南→西南的顺序构造顶点并闭合:

df1_sf <- df1 %>%
  rowwise() %>%
  mutate(
    geometry = list(
      st_polygon(list(
        matrix(
          c(swlng, swlat,  # 西南角
             nelng, swlat,  # 西北角
             nelng, nelat,  # 东北角
             swlng, nelat,  # 东南角
             swlng, swlat), # 回到起点闭合
          ncol = 2, byrow = TRUE
        )
      ))
    )
  ) %>%
  st_sf(crs = 4326) %>%
  ungroup()

3. 将df2转换为点sf对象

df2_sf <- df2 %>%
  st_as_sf(coords = c("lng", "lat"), crs = 4326)

4. 统计每个矩形内的蛇数量

方法一:通过空间连接后分组计数

# 匹配点到对应的矩形
joined_data <- st_join(df1_sf, df2_sf, join = st_contains)

# 按矩形分组统计蛇的数量
snake_count <- joined_data %>%
  group_by(nelat, nelng, swlat, swlng) %>%
  summarise(snake_count = n(), .groups = "drop")

# 查看结果
snake_count

方法二:直接计算每个矩形包含的点数

# 获取每个矩形包含的点索引
within_list <- st_within(df1_sf, df2_sf)

# 统计数量并添加到原df1
df1$snake_count <- sapply(within_list, length)

# 查看结果
df1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 04:51:10