Création d’une matrice de distances routières avec l’API de Google Maps

[MAJ] La fonction geocode du package ggmap fait la même chose, de l’importance de bien se renseigner sur ce qui existe déjà avant de coder… Cela m’aura quand même permis de m’initier aux API. [/MAJ]

Si la mise en place de l’outil graphHopper vous semble trop fastidieuse vous avez la possibilité d’utiliser l’API de Google Maps. L’utilisation de cette API ne va pas sans quelques limitations.

A partir des mêmes données que celle utilisées ici voici un exemple de script R permettant la constitution d’une matrice de distances par interrogation de l’API de Google Maps :

# librairies
library(RCurl)
library(RJSONIO)
 
# import de données
dataOrig<-read.csv("./data/ville.csv",sep=";",encoding="latin1")
dataDest<-read.csv("./data/ville.csv",sep=";",encoding="latin1")
 
# nombre d'origines et de destination
dOrig<-dim(dataOrig)[1]
dDest<-dim(dataDest)[1]
 
# creation de la matrice vide
req <-matrix(nrow=dOrig,ncol=dDest,dimnames=list(dataOrig$NOM,dataDest$NOM))
 
# création de la matrice des requêtes à envoyer
for (i in 1:dOrig){
  for (j in 1:dDest){
    req[i,j] <-paste("http://maps.googleapis.com/maps/api/distancematrix/json?origins=",
                     paste(dataOrig$Y[i],dataOrig$X[i],sep=","),
                     "&destinations=",
                     paste(dataDest$Y[j],dataDest$X[j],sep=","),
                     "&mode=driving&language=en&sensor=false",
                     sep="")
  }
}
 
# reception des requêtes
result<-apply(X=req,c(1,2),function(x) 
  {try(getURL(URLencode(x)),silent=TRUE)})
 
# fonction de parsage des réponses 
decode<-function(x){
  # décodage du résultat de la requête
  if (length(fromJSON(x)$rows[[1]]$elements[[1]])!=1){
    fromJSON(x)$rows[[1]]$elements[[1]]$duration$value
  } else {
    NA
  }
}
mat<-apply(X=result,c(1,2), decode)
matG<-round(mat/60,0)

La matrice produite indique les temps de trajet en minutes entre les 20 villes.

les données : ville.csv


4 réflexions au sujet de « Création d’une matrice de distances routières avec l’API de Google Maps »

  1. Bonjour,

    Je n’arrive pas à faire tourner le script avec vos données. Il semble bloqué au moment de la requête https vers l’API de Google. J’ai chargé les 3 packages nécessaires dans R.
    Pouvez-vous éventuellement m’aider de façon à faire tourner ma propre requête ?

    Merci

    1. La partie suivante :

      # reception des requêtes
      result<-apply(X=req,c(1,2),function(x)
      {try(getURL(URLencode(x)),silent=TRUE)})

      peut en effet être un peu longue, puisque c’est le moment ou Google est interrogé.
      Recevez vous un message d’erreur?

      1. Merci pour votre réponse. J’ai résolu mon problème entre-temps. En effet, c’était juste un problème de firewall sur mon lieu de travail…

Répondre à Marc Annuler la réponse.

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