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

tidycensus返回面积与sf::st_area()计算结果不一致问题咨询

差异原因

两类面积数值不匹配不是操作疏漏,核心是统计口径、数据基础、计算逻辑完全不同,不存在天然对齐的可能,具体差异点:

  • ALAND是美国人口普查局官方预先测算发布的法定陆域面积权威值:统计时已完全剔除行政边界内的内陆水域、近岸管辖海域面积,采用官方指定的等积测算标准、最高精度法定边界计算,是所有公开人口统计平台通用的标准口径,因此换算后和公开平台展示的德克萨斯州陆域面积完全一致。
  • sf::st_area()计算结果偏差来自三个层面:
    1. 统计范围不一致:默认拉取的行政边界几何包含陆域和范围内所有水域,没有做水域擦除,覆盖范围本身就大于陆域范围;
    2. 边界精度不一致:tidycensus依赖tigris包返回的几何数据默认做了边界概化简化,目的是压缩数据体积、提升加载速度,并非用于法定面积测算的最高精度边界;
    3. 计算基准不一致:默认返回的几何采用WGS84地理坐标系(EPSG:4269,经纬度坐标),直接调用st_area()计算的是椭球面面积,和普查局测算ALAND时使用的投影平面面积计算基准存在偏差。
      你观测到的11596365232平方米差值,基本就是德克萨斯州范围内的水域面积叠加边界简化、坐标基准偏差的总和。
对齐方案
  • 首选方案:直接使用数据集自带的ALAND字段计算人口密度。这是人口统计领域通用的标准口径,结果和所有公开平台展示值完全匹配,无需额外自行计算面积,效率和准确率最高。
  • 若必须通过st_area()计算面积,按以下步骤调整可将误差缩小到可接受范围,但无法做到和官方ALAND值100%一致:
    1. 拉取数据时关闭边界简化,使用高精度TIGER/Line边界,设置参数cb = FALSE,同时通过tigris包全局配置关闭简化规则;
    2. 将几何对象转换为北美区域通用的等积投影(如EPSG:5070北美阿尔伯斯等积投影);
    3. 额外拉取对应行政单元的水域面图层,从行政边界几何中擦除全部水域范围后,再调用st_area()计算陆域面积。

调整后的参考代码:

library(tidyverse)
library(tidycensus)
library(sf)
library(tigris)

census_api_key("your_api_key")
options(tigris_use_cache = TRUE)
# 关闭边界自动简化
tigris_options(tigris_simplify = FALSE)

pop_texas <- get_acs(
  geography = 'state',
  variables = "B01003_001", # 总人口
  year = 2020, 
  survey = 'acs5', 
  keep_geo_vars = TRUE,
  geometry = TRUE,
  cb = FALSE # 调用高精度TIGER边界,而非制图简化版边界
) %>%
  filter(GEOID == '48') %>% # 筛选德克萨斯州
  st_transform(crs = 5070) # 转换为等积投影

# 注意:此时计算结果为包含水域的总面积,仍需擦除水域才能接近ALAND值
sf::st_area(pop_texas)

提示:官方测算ALAND使用的边界精度阈值、水域剔除细则、计算参数未完全公开,自行计算的面积永远无法和官方值完全匹配,做常规人口统计分析时直接调用ALAND字段是最优选择。

内容的提问来源于stack exchange,提问作者Chris Kiniry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 07:45:34