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

如何在R中计算兴趣区内面积加权的普查区块人口总和?

按面积比例计算兴趣区内的加权人口总和

要实现按面积比例分配部分重叠区块的人口,核心得用st_intersection来切割重叠区域——st_join只能做属性关联,没法处理面积占比的计算。具体操作步骤如下:

  • 校验坐标系一致性
    虽然你导入的文件已经做过投影,但还是建议确认两个图层的坐标系完全一致,避免后续计算出错:

    st_crs(pop) == st_crs(buff)
    

    如果返回FALSE,用st_transform统一坐标系(比如以pop的坐标系为准):

    buff <- st_transform(buff, st_crs(pop))
    
  • 生成重叠区域并保留属性
    用st_intersection得到每个普查区块与兴趣区的交集部分,同时保留pop20(人口)和site(兴趣区标识)属性:

    intersect_data <- st_intersection(pop, buff)
    
  • 计算面积占比与加权人口
    先计算重叠区域和原普查区块的面积,再算出占比,最后得到加权人口:

    # 计算重叠区域的面积(单位与坐标系一致,如平方米)
    intersect_data$intersect_area <- st_area(intersect_data)
    # 计算原普查区块的总面积
    pop$total_area <- st_area(pop)
    # 将原区块面积关联到交集数据(替换`GEOID`为你数据中普查区块的唯一标识字段)
    intersect_data <- merge(intersect_data, pop[, c("GEOID", "total_area")], by = "GEOID")
    # 计算面积占比(转成数值类型避免单位对象干扰)
    intersect_data$area_ratio <- as.numeric(intersect_data$intersect_area / intersect_data$total_area)
    # 计算该重叠部分对应的加权人口
    intersect_data$weighted_pop <- intersect_data$pop20 * intersect_data$area_ratio
    
  • 按兴趣区汇总总加权人口
    用dplyr按site分组求和,得到每个兴趣区的总加权人口:

    library(dplyr)
    # 去掉几何属性方便数据框操作
    site_total_pop <- intersect_data %>%
      st_drop_geometry() %>%
      group_by(site) %>%
      summarise(total_weighted_pop = sum(weighted_pop, na.rm = TRUE))
    

    如果需要保留兴趣区的几何形状,可将汇总结果关联回原buff图层:

    buff_with_pop <- left_join(buff, site_total_pop, by = "site")
    

内容的提问来源于stack exchange,提问作者Amanda Goldberg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 06:25:23