Le géocodage dans R avec Google Maps

J'ai essayé d'exécuter le code de géocoder des emplacements dans R par l'intermédiaire de Google Maps et de la XML package à partir de ce blog:
http://www.r-chart.com/2010/07/maps-geocoding-and-r-user-conference.html

Voici ses fonctions:

getDocNodeVal=function(doc, path){
  sapply(getNodeSet(doc, path), function(el) xmlValue(el))
}

gGeoCode=function(str){
  library(XML)
  u=paste('http://maps.google.com/maps/api/geocode/xml?sensor=false&address=',str)
  doc = xmlTreeParse(u, useInternal=TRUE)
  str=gsub(' ','%20',str)
  lng=getDocNodeVal(doc, "/GeocodeResponse/result/geometry/location/lat")
  lat=getDocNodeVal(doc, "/GeocodeResponse/result/geometry/location/lng")
  c(lat,lng)
}

Quand je lance gGeoCode(), j'obtiens l'erreur suivante:

> gGeoCode("Philadelphia, PA")
failed to load external entity "http%3A//maps.google.com/maps/api/geocode/xml%3Fsensor=false&address=%20Philadelphia,%20PA"
Error: 1: failed to load external entity "http%3A//maps.google.com/maps/api/geocode/xml%3Fsensor=false&address=%20Philadelphia,%20PA"

Si je viens de le coller dans un navigateur l'url de l'API avec Philadelphia, PA ajouté à la fin, comme la chaîne de caractères passée à xmlParseTree, j'obtiens un résultat qui ressemble légitime xml lorsque je le télécharge.

Est-ce un problème avec le code, ou ai-je pas réussi à configurer quelque chose ou d'une autre?

  • Côté/off-topic: au lieu de str=gsub(' ','%20',str), il pourrait faire str=URLencode(str). Je ne commente ici parce que je pense que c'est une fonction de refroidissement 🙂
  • Oui, un très cool de la fonction. Si seulement ça marchait! :-/
  • l'appel json œuvres, voir ma réponse ci-dessous 🙂
  • Je sais que cette question est ancienne, mais il vaut la peine d'ajouter qu'il existe maintenant une geocode fonction dans le package ggmap qui fait tout ce travail pour vous.
InformationsquelleAutor JoFrhwld | 2010-07-15