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

