如何用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
相关产品推荐
相关产品推荐

