Увеличьте предел api в функции геокодирования ggmap (в R)

Я пытаюсь использовать функцию geocode из библиотеки ggmaps в R, чтобы получить координаты для определенных местоположений. До сих пор я могу использовать функцию.

Проблема, с которой я сталкиваюсь, заключается в том, что я бы хотел увеличить дневной лимит от 2,500 до 100,000. Официальный Google documentation говорит, что это легко возможно, если вы включите выставление счетов в проекте, что я с удовольствием сделаю. Когда вы продолжите этот процесс, Google Developers Console предоставит вам персонализированный ключ API.

Однако функция geocode не имеет возможности включить этот персонализированный ключ API. Вместо этого он запрашивает client (идентификатор клиента для бизнес-пользователей) и signature (подпись для бизнес-пользователей), а именно Google Maps API for Work может получить доступ к API. Я понимаю, что это тоже вариант, но это кажется очень полезным, поскольку API Карт Google для работы, похоже, предназначен для крупных корпоративных учетных записей:

Ежедневная квота, начинающаяся с 100 000 запросов в сутки, исходя из годовой контрактной покупки.

Итак, мой вопрос сводится к следующему: могу ли я использовать функцию geocode из библиотеки ggmaps в R для проверки API геокодирования Google Maps?

Ответ 1

Я не нашел способ использовать существующую функцию geocode (из библиотеки ggmap), чтобы ответить на этот вопрос, поэтому я просто создал новую функцию, чтобы сделать это сам, используя существующую функцию getURL (из библиотеки RCurl) и функции fromJSON (из библиотеки RJSONIO).

Напишите новую функцию:

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

Это дает вам список с теми же данными, что почти (но не совсем) в том же точном формате, что и список, созданный geocode("San Francisco").

Ответ 2

Я написал пакет googleway для доступа к API карт Google, где вы можете указать свой api-ключ.

Например

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"

Ответ 3

С ggmap версии 2.7 или выше (начиная с 13 декабря, еще не доступной в Cran, но вы можете установить с помощью devtools::install_github("dkahle/ggmap"), вам просто нужно запустить register_google(key = 'LONG KEY STRING'), а затем вы можете вызвать любую из функций ggmap например geocode или mutate_geocode, и используйте ваш ключ API.

Ответ 4

Спасибо за это! Это очень помогло мне. Ваше решение довольно специфично, поэтому я хотел включить адаптацию, которую я сделал из вашей функции. Он бросил ошибки, потому что raw_data и geo_data_list undefined. Я предполагаю, что они были специфичны для вашей локальной среды.

Для меня, ввода местоположения и возврата lat, lon работал с этим:

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

Вы можете изменить оператор return для индексации в geo_data для получения других свойств, отличных от lat lon.

Надеюсь, это поможет кому-то.

R