我已经在邮政编码级别下载了Census shapefile cb_2017_us_zcta510_500k.shp
(https://www.census.gov/geo/maps-data/data/cbf/cbf_zcta.html)
我也下载了映射文件,允许我添加相应的STATE
变量(https://www.census.gov/geo/maps-data/data/zcta_rel_download.html)
我合并了两个,我得到了:
library(sf)
library(dplyr)
big_df
Simple feature collection with 44434 features and 2 fields
geometry type: MULTIPOLYGON
dimension: XY
bbox: xmin: -176.6847 ymin: -14.37374 xmax: 145.8304 ymax: 71.34122
epsg (SRID): 4269
proj4string: +proj=longlat +datum=NAD83 +no_defs
First 10 features:
ZCTA5CE10 STATE geometry
1 35442 1 MULTIPOLYGON (((-88.25262 3...
2 35442 1 MULTIPOLYGON (((-88.25262 3...
3 35442 1 MULTIPOLYGON (((-88.25262 3...
现在,我试图过滤所有小岛屿和阿拉斯加:
remove_list <- c("02", "15", "72", "66", "78", "60", "69",
"64", "68", "70", "74", "81", "84", "86", "87", "89", "71", "76",
"95", "79")
big_df %>% filter(!STATE %in% map(remove_list, as.integer)) %>%
tm_shape(.) + tm_polygons('pt_count',palette = "Reds",
style = "quantile", n = 10,
title = "counts")
但我仍然得到一些小岛屿。
我在这里缺少什么? 谢谢!
答案 0 :(得分:2)
以下是获取美国大陆几何图形(国家概要)的方法:
library(raster)
library(sf)
library(dplyr)
us = getData('GADM', country='USA', level=0) %>%
st_as_sf() %>%
st_cast("POLYGON") %>%
mutate(area = st_area(.)) %>%
arrange(desc(area)) %>%
slice(1) # mainland US should be the largest
然后,您可以使用此功能运行st_intersection(big_df, us)
,仅提取big_df
中us
的部分内容。请注意,首先在st_buffer
周围创建st_convex_hull
或us
可能会有所回报,以确保您的big_df
不会在其边界的某处被剪切。