【R】osrmでrouting

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. さいごに

実際使うかどうかは”?”ですが、純粋に楽しいです。

Add a Comment

メールアドレスが公開されることはありません。