Увеличьте предел 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