【R】osrmでrouting
2020年10月7日
1. はじめに
osrm
というパッケージを「Road Routing in R」というポストを見て、初めて知りました。tidygeocoder
(こちらも初めて知りました)のパッケージでspatial data frame を作ると経路探索(routing)もできるようです。素晴らしい!早速やってみました。
2. インストール
CRANからインストールできます。
install.packages("osrm")
3. 使ってみる
以前住んでいたドイツ・Braunschweigの町の適当な2地点の経路探索をしてみます。一か所目は「Friedrich-Löffler-Weg 53, 38116 Braunschweig」で、2か所目は「Marstall 19, 38100 Braunschweig」です。北西の街はずれから、市街地に行くイメージです。
ずらずらとコードを書くと、こんな感じ。
library(sf) library(dplyr) library(tidygeocoder) library(osrm) adrs <- c("Friedrich-Löffler-Weg 53, 38116 Braunschweig", "Marstall 19, 38100 Braunschweig ") data <- tidygeocoder::geo(adrs, method = "osm") %>% st_as_sf(coords = c("long", "lat"), crs = 4326) osroute <- osrm::osrmRoute(loc = data, returnclass = "sf") summary(osroute)
> summary(osroute)
src dst duration distance geometry
Length:1 Length:1 Min. :13.78 Min. :8.629 LINESTRING :1
Class :character Class :character 1st Qu.:13.78 1st Qu.:8.629 epsg:4326 :0
Mode :character Mode :character Median :13.78 Median :8.629 +proj=long...:0
Mean :13.78 Mean :8.629
3rd Qu.:13.78 3rd Qu.:8.629
Max. :13.78 Max. :8.629
leafletを使って、表示もできます。
library(leaflet) leaflet(data = data) %>% addProviderTiles("CartoDB.Positron") %>% addMarkers(label = ~address) %>% addPolylines(data = osroute, label = "OSRM engine", color = "red")
おおすごい!
参考にしたポストでは、MapboxとHereでの経路探索の紹介もありました。
4. さいごに
実際使うかどうかは”?”ですが、純粋に楽しいです。