web-dev-qa-db-fra.com

get_map ne transmet pas la clé d'API (l'état HTTP était '403 interdit')

J'ai été confronté à ce problème dans la fonction get_map() (bibliothèque ggmap) dans R. 

Mon code était en cours d'exécution sans qu'il soit nécessaire de spécifier une clé d'API (pour source = "google") pendant plusieurs mois. Cependant, le code a cessé de fonctionner il y a quelques semaines. J'ai compris que Google a rendu la clé API obligatoire (ou peut-être ont-ils autorisé un certain nombre d'appels sans la clé API que j'ai épuisée). 

Cependant, même après avoir spécifié la clé API (obtenue auprès de Google Cloud Platform), mon code a continué à se comporter de la même manière. J'ai même contacté le service d'assistance Google Cloud, mais ils ont déclaré que la clé API en soi ne posait aucun problème et qu'ils étaient en mesure d'invoquer la carte. 

Je soupçonne que la fonction get_map() ne transmet pas le api_key lors de l'appel de la carte depuis Google. Tous les indicateurs de résolution seraient appréciés. 

Ci-dessous, le code reproductible (qui échoue). 

library(ggmap)

lat <- c(4,41)  # India lat boundaries
lon <- c(68,99) # India long boundaries
center = c(mean(lat), mean(lon))

map <- get_map(location = c(lon = mean(lon), 
                            lat = mean(lat)),
               api_key = <my api key>,
               zoom = 6,
               maptype = "terrain",
               source = "google",
               messaging = TRUE
)

Et ci-dessous se trouve le message d'erreur dans R (notez que la clé API n'est pas transmise)

trying URL 'http://maps.googleapis.com/maps/api/staticmap?center=22.5,83.5&zoom=6&size=640x640&scale=2&maptype=terrain&language=en-EN&sensor=false'
Error in download.file(url, destfile = tmp, quiet = !messaging, mode = "wb") : 
  cannot open URL 'http://maps.googleapis.com/maps/api/staticmap?center=22.5,83.5&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=22.5,83.5&zoom=6&size=640x640&scale=2&maptype=terrain&language=en-EN&sensor=false': HTTP status was '403 Forbidden'
7
Venky

Vous devez utiliser register_google(key = "...") dans chaque nouvelle session de R. Utiliser api_key = dans l'appel get_map() ne fonctionne pas. 


mis à jour: 2018-12-24 pour ggmap 2.7.904 et l'API Google Cloud actuelle} _

Didacticiel pas à pas

1. Mise à jour vers la dernière version de ggmap

require(devtools)
devtools::install_github("dkahle/ggmap", ref = "tidyup")

2. Activez votre clé API Google pour toutes les API de la console Google Cloud.

 enter image description here

 enter image description here

3. Charger ggmap et enregistrer la clé

library(ggmap)
register_google(key = "...")     # copied directly from Google Console via 'copy' button

4. Carte par défaut de la parcelle

ggmap(get_googlemap())          

 Houston

5. Parcelle avec nom de lieu (géocodage)

ggmap(get_map("Hannover, Germany"))

Si vous obtenez une erreur ici (par exemple, Forbidden 403), vous n'avez probablement pas activé votre clé pour les bonnes API. Tutoriel de dépannage du géocodage

 Hannover

6. Terrain avec longitude et latitude

ggmap(get_map(location=c(16.3738,48.2082), zoom=13, scale=2))

 3

9
Roman

Juste pour ajouter à la réponse de Roman Abashin (je ne peux malheureusement pas commenter): comme pour '? Get_map ()', l'argument 'api_key =' ne fonctionne pas pour Google Maps. Vous devrez utiliser la fonction 'register_google ()', mais à partir du 03/10/18, c'est uniquement dans la version de développement de ggmap, que vous pouvez obtenir comme ceci:

devtools::install_github("dkahle/ggmap", ref = "tidyup")

Ensuite, vous devrez également activer la facturation sur votre compte Google. Les 100 000 premières cartes que vous utiliserez chaque mois devraient être gratuites. Voir ici: https://cloud.google.com/maps-platform/pricing/sheet/ pour plus de détails.

(conseils tirés d'ici: https://github.com/dkahle/ggmap/issues/51 )

6
elskevdv

Je ne connais pas la résolution directe du problème ggmap, mais si vous souhaitez utiliser une carte interactive plutôt que statique, vous pouvez utiliser ma bibliothèque googelway

library(googleway)

set_key("GOOGLE_MAP_KEY")

lat <- c(4,41) #India lat boundaries
lon <- c(68,99) #India long boundaries
center = c(mean(lat), mean(lon))

google_map(location = center, zoom = 6)

 enter image description here

3
SymbolixAU

En ajoutant simplement à la réponse de @ Roman, voici le code qui a fonctionné pour moi:

if(!requireNamespace("devtools")) install.packages("devtools")
devtools::install_github("dkahle/ggmap", ref = "tidyup")
library(ggmap)
register_google(key = "your_API_key") 
usa<- get_googlemap(location='united states', zoom=4,maptype = "hybrid")

Pour plus d'informations, vous pouvez vous référer à la page de la bibliothèque sur github: ici
J'espère que ça aide!

2
Rudr