2015-12-21 6 views
12

Ich versuche, die geocode-Funktion aus der -Bibliothek in R zu verwenden, um Koordinaten für bestimmte Positionen abzurufen. Ich kann die Funktion bisher gut nutzen.Erhöhen Sie die API-Grenze in der Geocode-Funktion von ggmap (in R)

Das Problem, auf das ich gestoßen bin, ist, dass ich mein Tageslimit von 2,500 auf 100,000 erhöhen möchte. Das offizielle Google documentation sagt, dass dies ohne weiteres möglich ist, wenn Sie die Abrechnung für das Projekt aktivieren, was ich gerne mache. Wenn Sie mit diesem Prozess fortfahren, gibt Ihnen der einen personalisierten API-Schlüssel.

Die Funktion geocode hat jedoch keine Option, diesen personalisierten API-Schlüssel einzugeben. Stattdessen werden die Benutzer client (Client-ID für Geschäftsbenutzer) und signature (Signatur für Geschäftsbenutzer) abgefragt. So können Kunden auf die API zugreifen (Google Maps API for Work). Ich, dass dies auch eine Option, aber das scheint ein sehr Anwendungsfall zu sein, da Google Maps API for Work scheint für große Unternehmen Konten entworfen werden:

tägliche Quote pro 24 Stunden bei 100.000 Anfragen starten, basierend auf dem jährlichen vertraglichen Kauf.

So kocht meine Frage an dieser nach unten: kann ich die geocode Funktion aus der ggmaps Bibliothek in R die Google Maps Geocoding API ping?

Antwort

4

ich nicht einen Weg finden, habe die bestehende geocode Funktion (aus der ggmap Bibliothek) zu verwenden, um diese Frage zu beantworten, so dass ich gerade eine neue Funktion nur tun dies selbst die bestehende getURL Funktion (aus der Bibliothek RCurl) und die fromJSON Funktion (aus der RJSONIO Bibliothek).

Schreiben Sie die neue Funktion:

library(RJSONIO) 
library(RCurl) 

getGeoData <- function(location){ 
    location <- gsub(' ','+',location) 
    geo_data <- getURL(paste("https://maps.googleapis.com/maps/api/geocode/json?address=",location,"&key=**[YOUR GOOGLE API KEY HERE]**", sep="")) 
    raw_data_2 <- fromJSON(geo_data) 
    return(raw_data_2) 
} 

Test: getGeoData("San Francisco")

Dies gibt Ihnen eine Liste mit den gleichen Daten, die fast ist (aber nicht ganz) in exakt das gleiche Format wie die Liste erzeugt durch geocode("San Francisco").

5

Danke dafür! Es hat mir enorm geholfen. Ihre Lösung ist ziemlich spezifisch, deshalb wollte ich die Anpassungen meiner Funktion berücksichtigen. Es warf Fehler, weil raw_data und geo_data_list nicht definiert sind. Ich vermute, diese waren spezifisch für Ihre lokale Umgebung.

Für mich einen Ort einzugeben und die lat Rückkehr arbeitete lon mit diesem:

getGeoData <- function(location, api_key){ 
    location <- gsub(' ','+',location) 
    geo_data <- getURL(paste("https://maps.googleapis.com/maps/api/geocode/json?address=",location,sprintf("&key=%s",api_key), sep="")) 
    geo_data <- fromJSON(geo_data) 
    return(geo_data$results[[1]]$geometry$location) 
} 

Sie können die return-Anweisung zum Index in geo_data ändern, um zu verschiedenen anderen Eigenschaften als lat lon zu bekommen.

Ich hoffe, das hilft jemandem.

R

8

ich das Paket geschrieben habe googleway Google Maps API zuzugreifen, in dem Sie Ihren API-Schlüssel angeben.

Zum Beispiel

library(googleway) 

key <- "your_api_key" 

google_geocode(address = "San Francisco", 
       key = key) 

# $results 
# address_components 
# 1 San Francisco, San Francisco County, California, United States, SF, San Francisco County, CA, US, locality, political, administrative_area_level_2, political, administrative_area_level_1, political, country, political 
# formatted_address geometry.bounds.northeast.lat geometry.bounds.northeast.lng geometry.bounds.southwest.lat 
# 1 San Francisco, CA, USA      37.92977      -122.3279      37.69313 
# geometry.bounds.southwest.lng geometry.location.lat geometry.location.lng geometry.location_type 
# 1      -123.1661    37.77493    -122.4194   APPROXIMATE 
# geometry.viewport.northeast.lat geometry.viewport.northeast.lng geometry.viewport.southwest.lat 
# 1       37.812      -122.3482       37.7034 
# geometry.viewport.southwest.lng     place_id    types 
# 1      -122.527 ChIJIQBpAG2ahYAR_6128GcTUEo locality, political 
# 
# $status 
# [1] "OK" 
7

Mit ggmap Version 2.7 oder höher (Stand: 13. Dezember, noch nicht auf Cran, aber Sie können mit devtools::install_github("dkahle/ggmap") installieren, müssen Sie einfach register_google(key = 'LONG KEY STRING') laufen und dann können Sie alle Anrufe entgegen der ggmap-Funktionen wie geocode oder mutate_geocode und verwenden Sie Ihren API-Schlüssel