2015-12-21 2 views
12

Я пытаюсь использовать функцию geocode из библиотеки ggmaps в R, чтобы получить координаты для определенных мест. До сих пор я могу использовать функцию.Увеличьте предел api в геокодированной функции ggmap (в 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 геокодирования?

ответ

4

я не нашел способ использовать существующую 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) 
} 

Тест: getGeoData("San Francisco")

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

5

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

Для меня, вводя место и возвращение широта, долгота работал с этим:

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

Вы можете изменить оператор возврата к индексу в geo_data получить отличные Lat Lon различные свойства тоже.

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

R

8

Я написал пакет googleway для доступа к Google Maps API, где вы можете указать свой ключ 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" 
7

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

Смежные вопросы