R: найти перекрывающиеся геометрии: связать маршруты и дороги

#r #maps #polygon

Вопрос:

У меня есть набор данных транспортных маршрутов (объектов sf), и я хотел бы связать их с улицами (т. Е. Узнать, какие улицы содержатся в каждом маршруте). Каким может быть потенциальный подход?

Некоторые (очень немногие) фиктивные данные:

 
my_route=data.frame(
  stringsAsFactors = FALSE,
                 origin = c("E02001186", "E02001260"),
                 destination = c("E02001186", "E02001260"),
                 geometry = c("c(-2.438813, -2.438813, 53.429707, 53.429707)",
                       "c(-2.350659, -2.350659, 53.457229, 53.457229)")
)

roads=data.frame(
  stringsAsFactors = FALSE,
            osm_id = c(779434L, 779437L),
              name = c("Ruskin Avenue", "Barnes Avenue"),
          geometry = c("c(-1.5178758, -1.5171935, -1.5170291, -1.5168588, -1.5163581, -1.5158187, -1.5156387, -1.5154735, -1.5153933, -1.5146483, -1.5132778, -1.5126556, 53.7011323, 53.7013923, 53.7014655, 53.701575, 53.7020413, 53.7025049, 53.7026595, 53.7027965, 53.7028383, 53.7032271, 53.7039413, 53.7042654)",
                       "c(-1.5132778, -1.5113646, 53.7039413, 53.7031114)")
)


 

Полные данные о дорогах и маршрутах (приведенные выше наборы данных включают только несколько строк и столбцов) можно получить с помощью:

 library(stplanr)

od_data <- stplanr::flow[1:20, ]
desire_lines_ <- od2line(flow = od_data, zones = cents_sf)


routes= route(l = desire_lines_, route_fun = route_osrm)


library(osmextract)
library(osmdata)


chorlton_point = tmaptools::geocode_OSM("bristol")
c_m_coordiantes = rbind(chorlton_point$coords, chorlton_point$coords)
c_m_od = od::points_to_od(p = c_m_coordiantes, interzone_only = TRUE)
c_m_desire_line = od::odc_to_sf(c_m_od[-(1:2)])[1, ]
chorlton_buffer = stplanr::geo_buffer(c_m_desire_line, dist = 1000)
qtm(chorlton_buffer)


iow_sf_polygon <- getbb("bristol", format_out = "sf_polygon")

roads = oe_get(chorlton_buffer, stringsAsFactors = FALSE, quiet = TRUE)


 

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

1. Вы заглядывали в st_join() sf посылку? Вот с чем я бы попытался подойти к этому вопросу.

Ответ №1:

Похоже, это хорошо работает с «полными данными», которые вы предоставили:

 st_join(routes, roads)