web-dev-qa-db-fra.com

Utilisation de ggmap pour créer des cartes et une erreur persistante R

J'ai un morceau de code qui a tout d'un coup cessé de fonctionner. Aussi simple que cela. J'ai trouvé quelques réponses vagues sur SO, mais rien ne m'aide dans mon cas.

library(ggmap)
myLocation <- c(21.5, -18.5, 34, -8)

myMap <- get_map(location=myLocation,
                 source="google", maptype="terrain", crop=FALSE, color="bw")

Je reçois l'erreur suivante:

Warning: bounding box given to google - spatial extent only approximate.
converting bounding box to center/zoom specification. (experimental)
Error in download.file(url, destfile = tmp, quiet = !messaging, mode = "wb") : 
  cannot open URL 'http://maps.googleapis.com/maps/api/staticmap?center=-13.25,27.75&zoom=6&size=640x640&scale=2&maptype=terrain&language=en-EN&sensor=false'
In addition: Warning message:
In download.file(url, destfile = tmp, quiet = !messaging, mode = "wb") :
  cannot open URL 'http://maps.googleapis.com/maps/api/staticmap?center=-13.25,27.75&zoom=6&size=640x640&scale=2&maptype=terrain&language=en-EN&sensor=false': HTTP status was '403 Forbidden'

J'ai essayé cette ligne, mais n'a pas aidé:

options(download.file.method = "curl")

Si j'essaie osm - aussi des problèmes:

osmmap <- get_openstreetmap(bbox = c(left = 21.5, bottom = -18.5, right =
                                   34, top = 8), scale = 7, color = c("bw"))
Error: map grabbing failed - see details in ?get_openstreetmap.
In addition: There were 16 warnings (use warnings() to see them)

Une idée de ce qu'il faut faire?

3
MIH

Donc, il y a deux choses qui posent des problèmes.

  1. ggmap utilise Google Maps comme source cartographique standard. L'API Google Maps à laquelle ggmap se connecte nécessite une clé enregistrée de l'API Static Maps. Vous pouvez obtenir une clé d'API (gratuite) ici , mais notez que vous devrez enregistrer la facturation pour pouvoir en utiliser une (si vous ne le faites pas, les demandes d'API Google Maps renverront une erreur). Une fois cette configuration configurée, vous devrez l'enregistrer à chaque nouvelle session via register_google(key = "...").

 enter image description here

  1. L'API de Google Maps que ggmap se connecte aux besoins nécessite des coordonnées lon/lat (par exemple, location = c (-75.1636077,39.9524175)) pour s'exécuter complètement.

Donc, le code complet pour vous serait:

library(rjson)
library(digest)
library(glue)
library(devtools)
if(!requireNamespace("devtools")) install.packages("devtools")
devtools::install_github("dkahle/ggmap", ref = "tidyup")
library(ggmap)

register_google(key = "...",  # your Static Maps API key
                account_type = "standard")

map <- get_map(location = c(-75.1636077,39.9524175), zoom = 13)

ggmap(map)

 enter image description here

3

J'ai un problème similaire lorsque je télécharge des cartes à l'aide de get_map (403 interdites et OVER QUERY LIMIT). Je l'ai résolu en utilisantdputpour enregistrer la carte sur l'ordinateur etdget pour charger la carte.

map <- get_map(location = myLocation, source="google", maptype="terrain", crop=FALSE, color="bw")
dput(map, file = "myMaps")
map <- dget(file = "myMaps")

Maintenant, si vous avez plusieurs cartes à télécharger et un taux d'erreur élevé, vous pouvez utiliser une boucle avec tryCatch pour effectuer le téléchargement.

myLocation <- c(21.5, -18.5, 34, -8)

getMap <- function(loc){
  map <- get_map(location = loc, source="google", maptype="terrain", crop=FALSE, color="bw")
  i <<- 0
  return(map)
}

i <- -1
c <- 0 # avoid infinite loop

while(i < 0 & c < 20){
  tryCatch(map <- getMap(myLocation), error = function(w){
    i <- -1
  })
  c <- c+1
}
0
gc_