[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
OpenEdition vous propose de citer ce billet de la manière suivante :
Timothée Giraud (26 mai 2014). Création d’une matrice de distances routières avec l’API de Google Maps. R Géomatique. Consulté le 9 février 2025 à l’adresse https://doi.org/10.58079/tp32
En tout cas, encore merci pour votre solution !
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
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?
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…