#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()
Но результаты представлены на рисунке ниже:
т. е. и 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.
Он выполнит внутреннее (фильтрующее) пространственное соединение двух объектов. Будут сохранены только те полигоны (первый аргумент), которые содержат автомагистраль.