gpt4 book ai didi

r - 保留完全或部分在一个更大的多边形内的多边形,没有负缓冲区

转载 作者:行者123 更新时间:2023-12-02 19:23:47 24 4
gpt4 key购买 nike

我想保留构成更大人口普查地理区域的人口普查区域。这些区域应该完全适合更大的地理范围。

我可以用负缓冲区来做到这一点,但是有更好的方法吗?

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

balt <- places("Maryland",
year = 2018,
class = "sf") %>%
filter(NAME == "Baltimore") %>%
st_transform(4326)

balt_tracts <- get_acs(geography = "tract",
variables = "B01003_001E", # population
year = 2018,
state = "Maryland",
survey = "acs5",
geometry = TRUE) %>%
st_transform(4326)

balt_tracts %>%
.[st_within(st_buffer(., -0.001),
balt) %>% lengths > 0,] %>%
qtm()

enter image description here

交叉路口会返回共享边缘的较大地理区域之外的区域,这是我不想要的。

balt_tracts[balt,] %>% 
qtm()

enter image description here

编辑

我正在寻找一种方法来获取 st_overlaps() 的结果并仅保留边界内的那些多边形 (balt)。

balt_tracts[st_overlaps(balt_tracts, balt) %>% lengths > 0,] %>% 
tm_shape() + tm_polygons(col = "GEOID")

enter image description here

我注意到的一件事是 st_touches() 只返回三个多边形。这是一个精度问题,还是意味着人口普查区边界实际上并未与较大多边形的边界完全对齐?

 balt_tracts[st_touches(balt_tracts, balt) %>% lengths > 0,] %>% 
tm_shape() + tm_polygons(col = "GEOID")

enter image description here

最佳答案

在您的具体示例中,您应该只向 get_acs() 提供一个 county 参数,因为巴尔的摩市是一个独立的实体:

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

balt_tracts <- get_acs(geography = "tract",
variables = "B01003_001E", # population
year = 2018,
state = "Maryland",
county = "Baltimore city",
survey = "acs5",
geometry = TRUE)

qtm(balt_tracts)

enter image description here

但是,您提出的更广泛的问题是一个值得提出的问题。如果您知道您的几何图形完全对齐(就像在同一年使用 tigris/tidycensus 时一样,前提是 cb = TRUEcb = FALSE 一致使用),您可以使用 sf::st_filter()st_within 空间谓词来进行空间子集化。例如,假设我们想要获取巴尔的摩都市区(完全位于马里兰州)的人口普查区:

balt_metro <- core_based_statistical_areas(cb = TRUE, 
year = 2018,
class = "sf") %>%
filter(str_detect(NAME, "Baltimore"))

balt_metro_tracts <- tracts("MD", cb = TRUE,
year = 2018, class = "sf") %>%
st_filter(balt_metro, .predicate = st_within)

ggplot() +
geom_sf(data = balt_metro_tracts, fill = "white") +
geom_sf(data = balt_metro, fill = NA, color = "red")

enter image description here

关于r - 保留完全或部分在一个更大的多边形内的多边形,没有负缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62667218/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com