【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. さいごに
実際使うかどうかは”?”ですが、純粋に楽しいです。