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

如何基于县级普查数据批量校正人口栅格数据集?

批量校正人口栅格的高效实现方法

不用逐个处理区县再合并,直接通过分区统计+栅格化校正因子的方式就能一次性完成校正,大幅提升效率,以下是具体实现:

核心思路

  1. 一次性计算每个区县对应的WorldPop栅格人口总和
  2. 用区县普查人口除以栅格总和得到校正因子
  3. 将校正因子栅格化(匹配原人口栅格的分辨率/范围)
  4. 原人口栅格与校正因子栅格相乘,得到最终校正结果

方法一:用terra包快速实现(推荐)

terra是当前R中处理栅格/矢量数据的高效工具,速度远优于旧版raster包:

# 加载包
library(terra)

# 读入数据(替换为你的文件路径)
pop_rast <- rast("city_population.tif")  # 已裁剪好的城市人口栅格
county_shp <- vect("county_boundaries.shp")  # 县级行政边界

# 确保矢量与栅格投影一致(若已处理过可跳过)
county_shp <- project(county_shp, crs(pop_rast))

# 1. 计算每个区县的WorldPop栅格人口总和
zonal_stats <- zonal(pop_rast, county_shp, fun = "sum", na.rm = TRUE)

# 2. 给边界矢量添加校正因子字段
county_shp$correction_factor <- county_shp$census_data / zonal_stats$sum

# 3. 将校正因子栅格化,匹配原人口栅格的参数
correction_rast <- rasterize(county_shp, pop_rast, field = "correction_factor")

# 4. 生成校正后的人口栅格
corrected_pop_rast <- pop_rast * correction_rast

方法二:用exactextractr实现高精度校正

如果区县边界与栅格不完全对齐(比如不规则边界),exactextractr的精确提取能避免统计误差:

# 加载包
library(exactextractr)
library(dplyr)
library(terra)

# 读入数据
pop_rast <- rast("city_population.tif")
county_shp <- vect("county_boundaries.shp")
county_shp <- project(county_shp, crs(pop_rast))

# 1. 精确提取每个区县的栅格人口总和
zonal_sum <- exact_extract(pop_rast, county_shp, fun = "sum", na.rm = TRUE)
county_df <- as.data.frame(county_shp) %>%
  mutate(worldpop_sum = zonal_sum,
         correction_factor = census_data / worldpop_sum)

# 2. 栅格化校正因子
correction_rast <- rasterize(county_shp, pop_rast, field = county_df$correction_factor)

# 3. 校正人口栅格
corrected_pop_rast <- pop_rast * correction_rast

为什么这个方法更高效?

  • 避免了循环裁剪单个区县的重复IO操作,一次性完成分区统计
  • 栅格化校正因子后直接逐像元相乘,无需合并多个子栅格
  • 无论是terra还是exactextractr都做了底层优化,处理大栅格时速度优势明显

内容的提问来源于stack exchange,提问作者Wei Liao

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 20:00:01