39

I'm using the ggmap's geocode to find the latitude and longitude of different cities. It worked completely fine yesterday but I get an OVER QUERY LIMIT after only one request today.

In fact if I just load the library and run geocode it throws the OVER QUERY LIMIT error:

> library(ggmap)
> geocode("Paris")
Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=Paris&sensor=false
  lon lat
1  NA  NA
Warning message:
geocode failed with status OVER_QUERY_LIMIT, location = "Paris" 

I checked different topics on stackoverflow but nobody seems to have the same problem. I tried to see if I was over the 2500 limit (very unlikely but I'm new to coding so maybe I did something wrong...) and geocodeQueryCheck() reads 2498 but then again it resets every time I run library(ggmap).

It worked once fifteen minutes ago when I rebooted Rstudio but now it doesn't work anymore, I'm completely lost!

Does anyone have any idea what might be the problem?

PS: I'm new to stackoverflow so if you have any remark on anything please tell me!

Edouard Cuny
  • 1,169
  • 1
  • 10
  • 10
  • Very likely Google blocked your queries. If that's the case, don't think there is much you can do, other than waiting some time until G decides to accept your queries. Keep in mind that `geocodeQueryCheck()` just returns an internal counter and not the real number of queries you are left. See here also: https://developers.google.com/maps/documentation/geocoding/intro#StatusCodes – nicola Mar 23 '16 at 10:43
  • 1
    Thanks, that's what I did, the next day it worked perfectly! – Edouard Cuny Mar 24 '16 at 09:35

5 Answers5

31

I had a similar problem using ggmap::geocode() for a batch of locations where roughly 20% of locations gave the OVER QUERY LIMIT error even though geocodeQueryCheck() would show more than enough geocoding queries remaining, and the errors were sporadically spread throughout the locations, not just the last 20%. If I reran the subset of locations that failed the first time, again most would work, so I had to iterate through smaller subsets until they all had geocodes.

ggmap v2.7 allows the user to specify a Google Maps API key through the register_google() function. v2.7 is not on CRAN yet, so you have to use devtools::install_github("dkahle/ggmap") to install it. After updating to that version and setting my API Key register_google(key = "my_api_key"), the same batch worked in one run as expected.

The Google Maps API Key is easy to get: https://developers.google.com/maps/documentation/geocoding/get-api-key

sbha
  • 9,802
  • 2
  • 74
  • 62
  • maybe this is just because of MS tutorial [here](https://learn.microsoft.com/en-us/sql/advanced-analytics/tutorials/walkthrough-create-graphs-and-plots-using-r) ? :) – Dima Fomin Mar 29 '18 at 17:04
  • 1
    It looks like the Google API system has changed as of 16 July 2018. You now need an account and a credit card, although you still get some services for free. – Simon Woodward Oct 25 '18 at 18:43
  • 1
    I had to use `googleway` to solve this (see answer by @SymbolixAU) – Simon Woodward Oct 25 '18 at 20:27
15

If you want to be sure of your quota you can obtain a Google Maps API key, then use it in my googleway package

library(googleway)

key <- "your_api_key"

google_geocode(address = "Paris", key = key)

# $results
# address_components
# 1   Paris, Paris, Île-de-France, France, Paris, Paris, Île-de-France, FR, locality, political, administrative_area_level_2, political, administrative_area_level_1, political, country, political
# 2 Paris, Lamar County, Texas, United States, Paris, Lamar County, TX, 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     Paris, France                      48.90214                      2.469921                      48.81557
# 2    Paris, TX, USA                      33.73838                    -95.435455                      33.61185
# geometry.bounds.southwest.lng geometry.location.lat geometry.location.lng geometry.location_type
# 1                      2.225193              48.85661              2.352222            APPROXIMATE
# 2                    -95.627928              33.66094            -95.555513            APPROXIMATE
# geometry.viewport.northeast.lat geometry.viewport.northeast.lng geometry.viewport.southwest.lat geometry.viewport.southwest.lng
# 1                        48.90214                        2.469921                        48.81557                        2.225193
# 2                        33.73838                      -95.435455                        33.61185                      -95.627928
# place_id               types
# 1 ChIJD7fiBh9u5kcRYJSMaMOCCwQ locality, political
# 2 ChIJmysnFgZYSoYRSfPTL2YJuck locality, political
# 
# $status
# [1] "OK"
SymbolixAU
  • 25,502
  • 4
  • 67
  • 139
10

Tried to register for api_key, looks like a paid service.

source = “dsk” seems to be the only workaround:

geocode("Paris", source = "dsk")

See if it works for you.

Ghose Bishwajit
  • 316
  • 4
  • 12
7

From June 11th 2018 Google changed the access to the Google API.

Now you NEED to set a credit card to your account to get permission to use the APIs. There it's a free account which will not charge you nothing on your credit card with some limitations on the number of queries you can do (like we had before this change).

If you need more queries you should change your account to a normal one which will charge you when you use the APIs more of the free limits.

NetVicious
  • 3,848
  • 1
  • 33
  • 47
4

The request doesn't use a key, which means: you share the quota with all pages hosted on the same server(same IP-address/may be houndreds of domains).

As it seems this library only supports an option for business-users to provide credentials.

There is a feature-request from 2014 , but as long as it's not implemented I'm afraid there is nothing you can do(as a non-business-user) when you use this library(except you modify the library, but I'm not familiar with R so I can't give further help).

Dr.Molle
  • 116,463
  • 16
  • 195
  • 201