合并重叠多边形后如何保留最早关联多边形的日期与ID
解决方法
要实现合并重叠洪水多边形并保留每组最早洪水的日期与ID,可按以下步骤程序化处理:
步骤1:合并原始图层
先将两个季风季的洪水图层合并为一个完整数据集,方便统一处理:
# 合并两个原始洪水图层 flood_all <- rbind(flood1, flood2)
步骤2:生成带分组ID的合并区域
对所有洪水多边形进行合并(dissolve重叠部分),并为每个合并后的区域分配唯一分组ID:
# 生成合并后的洪水区域并添加分组标识 flood_agg <- sf::st_union(flood_all) %>% sf::st_cast("POLYGON") %>% sf::st_sf() %>% dplyr::mutate(group_id = dplyr::row_number())
步骤3:空间连接关联原始多边形与合并组
通过空间交集操作,将每个原始洪水多边形匹配到对应的合并区域分组:
# 空间连接:匹配每个原始多边形所属的合并组 joined <- sf::st_join(flood_all, flood_agg, join = sf::st_intersects)
步骤4:提取每组最早的洪水记录
按分组ID聚合,筛选出每个合并组中日期最早的洪水记录,保留对应的ID与日期:
# 按分组筛选最早日期的记录 earliest_records <- joined %>% dplyr::group_by(group_id) %>% dplyr::filter(date == min(date)) %>% dplyr::select(group_id, id, date) %>% dplyr::distinct(group_id, .keep_all = TRUE) # 若同一组存在多个同日期洪水,取第一条记录;可按需调整
步骤5:合并得到最终结果
将合并后的洪水区域与对应的最早洪水信息关联,得到包含目标属性的最终图层:
# 合并区域与最早记录,生成结果图层 final_flood <- dplyr::left_join(flood_agg, earliest_records, by = "group_id")
注意事项
- 若同一合并组存在多个日期相同的最早洪水,可根据需求修改
distinct部分,例如用paste(id, collapse = ", ")合并所有对应ID。 - 该方法针对2000个左右的多边形完全适用,sf与dplyr的组合操作效率足以处理这类规模的数据。
内容的提问来源于stack exchange,提问作者JohnnyJohnson
相关产品推荐
相关产品推荐

