2017-02-16 3 views
1

Ich versuche, einen Vektor zu geolocate, der die R-Bibliothek Ggmap verwendet.Ggmap "dsk" Ratenbegrenzung

location_google_10000 <- geocode(first10000_string, output = "latlon", 
    source = "dsk", messaging = FALSE) 

Das Problem ist, dass ich „DSK“ -Der Daten Wissenschaft Toolkit API- bin mit und deshalb hat es keine Grenzen, wie Google bewerten (limites bis 2500 pro Tag Koordinaten). Aber wenn ich versuche, mit einem Vektor zu laufen, die mehr als 2500 enthält, erscheint die folgende Meldung angezeigt:

Error: google restricts requests to 2500 requests a day for non-business use. 

Ich habe versucht, den Code mit dsk mit 1000 Adressen zu laufen, und später überprüft, ob tatsächlich google oder dsk api wird durchgeführt:

> geocodeQueryCheck() 
2500 geocoding queries remaining. 

Also aus irgendeinem Grunde es mir nicht erlauben, mehr zu verwenden, als 2500 mit dem „DSK“, aber ich bin sicher, dass es nicht google verwenden.

Antwort

3

Ich lief gerade in das gleiche Problem und fand Ihren Beitrag. Ich konnte dies umgehen, indem ich die Werte client und signature auf Dummy-Werte, z.

geocode(myLocations, client = "123", signature = "123", output = 'latlon', source = 'dsk') 

Das Problem mit diesem Teil der geocode Funktion zu sein scheint ...

if (length(location) > 1) { 
     if (userType == "free") { 
      limit <- "2500" 
     } 
     else if (userType == "business") { 
      limit <- "100000" 
     } 
     s <- paste("google restricts requests to", limit, "requests a day for non-business use.") 
     if (length(location) > as.numeric(limit)) 
      stop(s, call. = F) 

userType wird oben in diesem Teil des Codes ...

if (client != "" && signature != "") { 
     if (substr(client, 1, 4) != "gme-") 
      client <- paste("gme-", client, sep = "") 
     userType <- "business" 
    } 
    else if (client == "" && signature != "") { 
     stop("if signature argument is specified, client must be as well.", 
      call. = FALSE) 
    } 
    else if (client != "" && signature == "") { 
     stop("if client argument is specified, signature must be as well.", 
      call. = FALSE) 
    } 
    else { 
     userType <- "free" 
    } 

So , wenn die Parameter client und signature leer sind userType ist auf "frei" eingestellt und die Grenze ist wiederum auf 2.500 gesetzt. Wenn Sie Werte für diese Parameter angeben, werden Sie als "geschäftlicher" Benutzer mit einem Limit von 100.000 betrachtet. Dies ist ein guter Test, wenn angenommen wird, dass der Benutzer "Google" anstelle von "dsk" als Quelle verwendet, aber übereifrig ist, wenn die Quelle "dsk" ist und wahrscheinlich überschrieben werden sollte. Um einfältig vielleicht so etwas wie ...

if (source == "google") { 
     if (client != "" && signature != "") { 
       if (substr(client, 1, 4) != "gme-") 
        client <- paste("gme-", client, sep = "") 
       userType <- "business" 
      } 
      else if (client == "" && signature != "") { 
       stop("if signature argument is specified, client must be as well.", 
        call. = FALSE) 
      } 
      else if (client != "" && signature == "") { 
       stop("if client argument is specified, signature must be as well.", 
        call. = FALSE) 
      } 
      else { 
       userType <- "free" 
      } 
    } else { 
      userType <- "business" 
} 

, die Probleme verursachen würde, wenn client oder signature Parameter obwohl andere Quellen geplant waren. Ich werde den Paketautor anpingen.

+0

Danke! Es funktioniert irgendwie, aber immer noch begrenzt. Der Grund dafür ist, dass die Verwendung von Dummy-Werten zwar das Limit von 2500 überschreitet, jetzt aber mit dem Limit von Google endet. Das ist 10.000: Fehler: google schränkt Anfragen auf 100000 Anfragen pro Tag für nicht-geschäftliche Zwecke ein. –