Как сохранить только округа, пересекаемые автомагистралью?

#r #ggplot2 #gis #spatial #sf

Вопрос:

Я новичок в R и очень новичок в построении ГИС на R с помощью пакетов sf и ggplot2. У меня есть набор данных «comuni», содержащий все коммуны в Италии (аналогично округам) и одну из всех автомагистралей в Италии под названием «only_motorway». Я знаю, что могу использовать определенные регионы в качестве разделителя файлов cookie и сохранять только те автомагистрали, которые содержатся в таких регионах, используя функцию st_intersection (). Однако я хотел бы сделать обратное, когда, учитывая, что у меня есть шейп-файл автомагистрали A3, я хотел бы сохранить только те коммуны, которые пересекает эта конкретная автомагистраль.

Я попытался использовать функцию st_intersection следующим образом:

 only_motorway_A3 <- only_motorway %>%
  filter(ref == "A3")

comuni_A3 <- st_intersection(only_motorway_A3,comuni)

ggplot()  
  geom_sf(data = comuni_A3, 
          color = "black", size = 0.1, fill = "black")  
  geom_sf(data = only_motorway_A3, size = 0.15, color = "green")  
  coord_sf(crs = 32632)    
  theme_void()
 

Но результаты представлены на рисунке ниже:

ggplot

т. е. и only_motorway_A3, и comuni_A3 имеют один и тот же столбец геометрии, и оба они строят линию шоссе. Вместо этого я хотел построить линию шоссе (зеленым цветом) от only_motoway_A3, а вокруг нее коммуны, пересекаемые ею (черным цветом) от comuni_A3. Я надеюсь, что это понятно, и заранее благодарю вас за вашу помощь!

Комментарии:

1. Я думаю, ты хочешь st_intersects вместо st_intersection этого . Если вы используете st_intersects , вы получите логический вектор true и false, который позволит вам подмножество comuni

Ответ №1:

Рассмотрим sf::st_join() вызов, используя, во-первых, ваши полигоны, а во-вторых, строковые объекты, для параметра left которых установлено значение false.

Он выполнит внутреннее (фильтрующее) пространственное соединение двух объектов. Будут сохранены только те полигоны (первый аргумент), которые содержат автомагистраль.