Mise à jour du package osrm (version 2.0.0)

Le package osrm assure le lien entre R et l’API d’OSRM. OSRM est un service de routage basé sur les données OpenStreetMap.
Ce package permet d’obtenir le temps de trajet, la distance et le plus court chemin entre deux points via le réseau routier d’OpenStreetMap. Il est également possible d’obtenir des matrices de distances entre deux séries de points.

Pour suivre l’évolution de l’API qu’il interface, j’ai mis à jour le package osrm.
Vue l’ampleur des modifications sur l’API, la compatibilité descendante n’est pas assurée, les codes anciens ne fonctionneront plus.

Voici un petit exemple d’utilisation du package (télécharger les données ici) :

library(osrm) # to get paths between points
library(cartography) # to plot a base map
library(rgdal) # to import/export shapefile

# import a shapefile
letter <- readOGR(dsn="/home/tg/Bureau/", layer = "R")

# plot a base map using getTiles and tilesLayer 
# functions from cartography
par(mar=c(0,0,0,0))
mytiles <- getTiles(spdf = letter, type = "osm")
tilesLayer(mytiles)

# plot the points
plot(letter, add=T, pch = 20, col = 'blue', cex = 2)

# Create a SpaTialLinesDataFrame of all the roads
df <- data.frame(coordinates(letter))
names(df) <- c("X", "Y")
df$id <- 1:nrow(df)
for (i in 1:(nrow(df)-1)){
  road <- osrmViarouteGeom(src = df[i,3:1], 
                           dst = df[i+1,3:1], 
                           sp =TRUE)
  if (exists("myroads")){
    myroads <- rbind(myroads, road)
  }else{
    myroads <- road
  }
}

# and plot it
plot(myroads, col = "red", lwd = 2, add=TRUE)

### export the road layer
## writeOGR(obj = myroads, dsn="/home/tg/Bureau",
##          layer = "myroads", driver = "ESRI Shapefile")

Rroads

La prochaine version (actuellement disponible sur GitHub) permet d’utiliser directement des SpatialPointsDataFrame comme argument des fonctions.

Voir aussi :
Temps de trajet et matrices de distances avec R et OpenStreetMap


Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *