Используйте R, чтобы определить, какие округа входят в более крупные округа Конгресса, используя sf. - PullRequest
0 голосов
/ 11 июля 2020

У меня есть один объект НФ с округами США, а другой - с округами США. Мне нужно знать (i) какие округа входят в какой округ Конгресса, и (ii) если один округ перекрывает границу округа (т.е. находится в пределах двух округов), то мне нужно знать, в каком округе он находится «больше» или в какой пропорции округа лежит в каждом.

Вот мои точные sf-объекты:

library(USAboundaries)
library(sf)

union_states <- c("Maine", "New Hampshire", "Vermont", "New York", "Massachusetts", "Rhode Island", "Connecticut", "Pennsylvania", "New Jersey", "Ohio", "Indiana", "Illinois", "Iowa", "Wisconsin", "Minnesota", "Michigan") # only core states: exluces CA, WA, KS, and boundary states
union_sf <- us_counties(map_date = "1865-01-01", states = union_states, resolution = 'high')
union_congress_sf <- us_congressional(resolution = "low", states = union_states)

Этот вопрос ставит мой точный вопрос, но он немного устарел и не работает с sf-объектами: Использование пересечений R для создания ключа «многоугольники внутри многоугольника» с использованием двух слоев шейп-файла.

1 Ответ

2 голосов
/ 13 июля 2020

Вы можете использовать st_join() с аргументом largest = TRUE.

Для объектов округов и округов Конгресса я удалил большинство столбцов, чтобы результат был более чистым. В выходных данных name - округ, а geoid - округ Конгресса.

library(dplyr)

union_sf <- union_sf %>% 
  select(name, geometry)
  
union_congress_sf <- union_congress_sf %>% 
  select(geoid, state_name, geometry)

join <- st_join(union_sf,
                union_congress_sf,
                largest = TRUE)

join

Simple feature collection with 804 features and 3 fields
geometry type:  MULTIPOLYGON
dimension:      XY
bbox:           xmin: -97.23421 ymin: 36.97353 xmax: -66.94993 ymax: 49.38437
geographic CRS: WGS 84
First 10 features:
           name geoid  state_name                       geometry
2455  FAIRFIELD  0904 Connecticut MULTIPOLYGON (((-73.5055 41...
2481   HARTFORD  0901 Connecticut MULTIPOLYGON (((-72.81354 4...
2495 LITCHFIELD  0905 Connecticut MULTIPOLYGON (((-73.00875 4...
2497  MIDDLESEX  0902 Connecticut MULTIPOLYGON (((-72.52454 4...
2541  NEW HAVEN  0903 Connecticut MULTIPOLYGON (((-72.93861 4...
2554 NEW LONDON  0902 Connecticut MULTIPOLYGON (((-72.33685 4...
2560    TOLLAND  0902 Connecticut MULTIPOLYGON (((-72.10217 4...
2569    WINDHAM  0902 Connecticut MULTIPOLYGON (((-71.79924 4...
4443      ADAIR  1903        Iowa MULTIPOLYGON (((-94.24152 4...
4444      ADAMS  1903        Iowa MULTIPOLYGON (((-94.47062 4...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...