Créer une matrice de distance

L’API OSRM

Il est possible d’attaquer n’importe quelle API en utilisant le package RCurl qui permet d’envoyer des requetes http://

https://neocarto.github.io/rspatial/osrm/osrm.html

Le package osrm

Le package osrm ets une interface entre R et l’API OSRM. OSRM est un service de routage basé sur les données OpenStreetMap. Ce package permet donc de calculer des itinéraires, des trajets, des isochrones et des matrices de distances de déplacement (temps de trajet et distance kilométrique).

library(sf)
library(osrm)

Données du package

apotheke.df <- read.csv(system.file("csv/apotheke.csv", package = "osrm"))
apotheke.sf <- st_read(system.file("gpkg/apotheke.gpkg", package = "osrm"), 
                       quiet = TRUE)

osrmTable

osrmTable permet d’obtenir des matrices de temps de parcours entre des points. Cette fonction sert d’interface au service table d’OSRM.

# Travel time matrix
distA <- osrmTable(loc = apotheke.df[1:50, c("id","lon","lat")])
# First 5 rows and columns
distA$durations[1:5,1:5]
##            440338666 538057637 977657079 3770254015 364363337
## 440338666        0.0      21.2      33.5       20.6      12.0
## 538057637       22.7       0.0      41.8       16.1      20.2
## 977657079       33.1      40.6       0.0       30.2      27.2
## 3770254015      19.4      15.3      29.3        0.0      12.9
## 364363337        9.5      20.2      26.7       12.3       0.0

osrmRoute

osrmRoute permet d’obtenir la géométrie du trajet entre deux points. Cette fonction sert d’interface au service route d’OSRM.

# Travel path between points
route1 <- osrmRoute(src = apotheke.sf[1, ], dst = apotheke.df[16, ], 
                    returnclass="sf")
# Display paths
plot(st_geometry(route1))
plot(st_geometry(apotheke.sf[c(1,16),]), col = "red", pch = 20, add = TRUE)

osrmTrip

osrmTrip permet d’obtenir la géométrie du trajet le plus court entre plusieurs points. Cette fonction sert d’interface au service trip d’OSRM.

# Get a trip with a set of points (sf POINT)
trips <- osrmTrip(loc = apotheke.sf[1:5, ], returnclass = "sf")
mytrip <- trips[[1]]$trip
# Display the trip
plot(st_geometry(mytrip), col = "black", lwd = 4)
plot(st_geometry(mytrip), col = c("red", "white"), lwd = 1, add = TRUE)
plot(st_geometry(apotheke.sf), pch = 21, bg = "red", cex = 1, add = TRUE)

osrmIsochrone

basé sur osrmTable, la fonction osrmIsochrone permet de construire des isochrones.

iso <- osrmIsochrone(loc = c(13.43,52.47), breaks = seq(0,14,2),
                     returnclass="sf")
plot(st_geometry(iso), col = c('grey80','grey60','grey50',
                               'grey40','grey30','grey20'))