如何使用 tidycensus 计算从美国人口普查中提取的地理空间邮政编码多边形的面积

问题描述

我想计算我所在州(北卡罗来纳州)的邮政编码的人口密度。我能够从美国人口普查中提取邮政编码人口和多边形,并使用以下代码绘制北卡罗来纳州的地图:

library(tidycensus)
geo <- get_acs(geography = 'zcta',# Get zip code-level data
               state = 'NC',# for NC
               year = 2019,# for 2019
               table = 'B01003',# from this US Census table
               geometry = TRUE) %>%       # and return the geospatial polygons for mapping
       dplyr::rename('population' = estimate,'zipcode' = NAME) %>%
       select(-moe) %>%
       arrange(zipcode) 

p <- tm_shape(geo) +
  tm_polygons('population')
p

这是按邮政编码映射人口。为了按邮政编码计算和映射人口密度,我需要每个邮政编码多边形的面积(以英里或平方千米为单位)。我正在努力寻找一种方法来 (a) 从美国人口普查站点获取这些数据,(b) 在其他地方找到它,或者 (c) 使用多边形几何来计算它。

任何建议将不胜感激。

解决方法

我能够为我的问题找到一个非常简单的答案。请注意,在 geo 数据框中的变量 geometry 中可以找到描述每个邮政编码的多边形。

首先,我们计算面积,默认情况下以 m^2 为单位返回。

library(sf)
geo$area.m2 <- st_area(geo$geometry)

其次,我们转换为英里 ^2 单位。

library(units)
geo$area.miles2 <- set_units(geo$area.m2,miles^2)
,

另一种方法是在 keep_geo_vars = TRUE 中设置 get_acs()。这将返回每个 ZCTA 多边形中陆地和水域的面积(以平方米为单位)。在计算人口密度时,您可能更喜欢只使用土地面积而不是每个 ZCTA 多边形的总面积。

陆地面积变量为ALAND10,水域面积为AWATER10

library(tidycensus)
get_acs(geography = 'zcta',state = 'NC',year = 2019,table = 'B01003',geometry = TRUE,keep_geo_vars = TRUE)

#> Getting data from the 2015-2019 5-year ACS
#> Simple feature collection with 808 features and 9 fields
#> geometry type:  MULTIPOLYGON
#> dimension:      XY
#> bbox:           xmin: -84.32187 ymin: 33.84232 xmax: -75.46062 ymax: 36.58812
#> geographic CRS: NAD83
#> First 10 features:
#>    ZCTA5CE10     AFFGEOID10 GEOID   ALAND10 AWATER10        NAME   variable
#> 1      28906 8600000US28906 28906 864608629 28813485 ZCTA5 28906 B01003_001
#> 2      28721 8600000US28721 28721 285413675    41953 ZCTA5 28721 B01003_001
#> 3      28365 8600000US28365 28365 498948199  2852124 ZCTA5 28365 B01003_001
#> 4      27317 8600000US27317 27317 139042432  9345547 ZCTA5 27317 B01003_001
#> 5      27562 8600000US27562 27562 139182043 11466187 ZCTA5 27562 B01003_001
#> 6      28748 8600000US28748 28748 218992045        0 ZCTA5 28748 B01003_001
#> 7      28025 8600000US28025 28025 282005597   384667 ZCTA5 28025 B01003_001
#> 8      28441 8600000US28441 28441 331231481   282711 ZCTA5 28441 B01003_001
#> 9      27893 8600000US27893 27893 285314738  3173744 ZCTA5 27893 B01003_001
#> 10     28101 8600000US28101 28101   2319755   131290 ZCTA5 28101 B01003_001
#>    estimate  moe                       geometry
#> 1     19701  736 MULTIPOLYGON (((-84.31137 3...
#> 2     10401  668 MULTIPOLYGON (((-82.93706 3...
#> 3     15533 1054 MULTIPOLYGON (((-78.29569 3...
#> 4     16169  875 MULTIPOLYGON (((-79.87638 3...
#> 5      2149  431 MULTIPOLYGON (((-78.99166 3...
#> 6     12606 1020 MULTIPOLYGON (((-82.88801 3...
#> 7     54425 1778 MULTIPOLYGON (((-80.62793 3...
#> 8      3396  588 MULTIPOLYGON (((-78.6127 34...
#> 9     39531 1258 MULTIPOLYGON (((-78.06593 3...
#> 10      970  245 MULTIPOLYGON (((-81.09122 3...

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...