如何在R中通过质心连接两个Shapefile?
解决方案
步骤1:统一坐标系
先确认两个sf对象的坐标参考系(CRS)一致,若不同则转换对齐:
# 假设市政多边形sf名为municipalities,UTM质心sf名为utm_centroids if (!st_crs(municipalities) == st_crs(utm_centroids)) { utm_centroids <- st_transform(utm_centroids, st_crs(municipalities)) }
步骤2:点-多边形空间匹配
用st_join结合st_within参数,将质心匹配到对应的市政多边形,同时保留市政几何:
# 左连接确保所有市政都被保留,哪怕无匹配的UTM网格 matched_data <- st_join(municipalities, utm_centroids, join = st_within, left = TRUE)
步骤3:按市政聚合物种数据
基于市政的唯一标识(比如muni_id,替换为你数据中的实际列名),对Ab和Sp列做聚合(示例用求和,可按需换成均值等):
# 先移除几何信息,聚合数值列 aggregated_stats <- matched_data %>% st_drop_geometry() %>% group_by(muni_id) %>% summarise( total_Ab = sum(Ab, na.rm = TRUE), total_Sp = sum(Sp, na.rm = TRUE) ) # 将聚合结果与原市政sf关联,恢复几何信息 final_sf <- left_join(municipalities, aggregated_stats, by = "muni_id")
导出结果Shapefile
st_write(final_sf, "aggregated_municipal_species.shp", delete_layer = TRUE)
关键注意点
st_within是核心逻辑:专门用于判断点是否包含在多边形内,完全匹配你的质心-市政匹配需求- 左连接+
na.rm=TRUE:保证无UTM覆盖的市政也被保留,同时处理空值聚合问题 - 聚合必须用市政唯一标识:避免同名市政导致的错误分组
内容的提问来源于stack exchange,提问作者Wonderia
相关产品推荐
相关产品推荐

