webentwicklung-frage-antwort-db.com.de

get_map übergibt den API-Schlüssel nicht (HTTP-Status war '403 Forbidden')

Dieses Problem ist in der Funktion get_map() (ggmap) in R. aufgetreten. 

Mein Code wurde für mehrere Monate ohne die Angabe eines API-Schlüssels (für source = "google") ausgeführt. Der Code funktionierte jedoch vor ein paar Wochen nicht mehr. Ich habe verstanden, dass Google den API-Schlüssel obligatorisch gemacht hat (oder sie erlaubten möglicherweise eine bestimmte Anzahl von Anrufen ohne den von mir erschöpften API-Schlüssel). 

Selbst nach Angabe des API-Schlüssels (erhalten von Google Cloud Platform) veränderte sich mein Code jedoch weiterhin. Ich habe sogar den Google Cloud-Support kontaktiert, aber der API-Schlüssel per se war fehlerhaft, und die Karte konnte an ihrem Ende aufgerufen werden. 

Ich vermute, dass die get_map()-Funktion nicht den api_key beim Aufrufen der Karte von Google übergibt. Jeder Hinweis auf eine Lösung wäre dankbar. 

Unten ist der reproduzierbare Code (der fehlschlägt). 

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
)

Und unten ist die Fehlermeldung in R (beachten Sie, dass der API-Schlüssel nicht übergeben wird).

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

Sie müssen register_google(key = "...") in jeder neuen Sitzung von R verwenden. Die Verwendung von api_key = im Aufruf von get_map() funktioniert nicht. 


aktualisiert am: 2018-12-24 für ggmap 2.7.904 und aktuelle Google Cloud-API

Schritt für Schritt Anleitung

1. Aktualisieren Sie auf die neueste Version von ggmap

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

2. Aktivieren Sie Ihren Google API-Schlüssel für alle APIs in der Google Cloud Console

 enter image description here

 enter image description here

3. Laden Sie ggmap und den Registrierungsschlüssel

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

4. Plotten Sie die Standardkarte

ggmap(get_googlemap())          

 Houston

5. Plot mit dem Ortsnamen (Geokodierung)

ggmap(get_map("Hannover, Germany"))

Wenn Sie hier eine Fehlermeldung erhalten (z. B. Forbidden 403), haben Sie Ihren Schlüssel höchstwahrscheinlich nicht für die richtigen APIs aktiviert. Tutorial zur Fehlerbehebung bei Geokodierungen

 Hannover

6. Plot mit Längen- und Breitengrad

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

 3

9
Roman

Nur um Roman Abashins Antwort hinzuzufügen (leider kann ich nicht kommentieren): Gemäß '? Get_map ()' funktioniert das Argument 'api_key =' nicht für Google Maps. Sie müssen die Funktion 'register_google ()' verwenden. Ab dem 10.03.18 ist dies jedoch nur in der Entwicklungsversion von ggmap möglich, die Sie wie folgt erhalten können:

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

Dann müssen Sie auch die Abrechnung für Ihr Google-Konto aktivieren. Die ersten 100.000 Karten, die Sie jeden Monat verwenden, sollten kostenlos sein. Weitere Informationen finden Sie hier: https://cloud.google.com/maps-platform/pricing/sheet/ für Details.

(Tipps von hier: https://github.com/dkahle/ggmap/issues/51 )

6
elskevdv

Ich kenne die direkte Lösung des Problems ggmap nicht. Wenn Sie jedoch lieber mit einer interaktiven Karte als mit einer statischen Karte arbeiten, können Sie meine googelway-Bibliothek verwenden

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

Hinzufügen von @ Roman's Antwort, hier der Code, der für mich funktioniert hat:

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")

Weitere Informationen finden Sie auf der Bibliotheksseite von github: hier
Hoffentlich hilft es!

2
Rudr