增加ggmap的地理编码功能中的api限制(在R中)

时间:2015-12-21 19:29:47

标签: r google-maps google-maps-api-2 geocode ggmap

我正在尝试使用geocodeggmaps库中的R函数来获取特定位置的坐标。到目前为止,我能够正常使用该功能。

我遇到的问题是我希望将每日限额从2,500增加到100,000。官方Google documentation 如果你在项目上启用计费,我很乐意这样做,我很乐意这样做。继续此过程后,Google Developers Console会为您提供个性化的API密钥。

但是,geocode函数无法选择放入此个性化API密钥。相反,它会要求client(业务用户的客户端ID)和signature(业务用户的签名),这是Google Maps API for Work客户可以访问API的方式。我知道这也是一个选项,但这似乎是一个非常大的用例,因为Google Maps API for Work似乎是为大型企业帐户设计的:

  

根据年度合同购买情况,每24小时的每日配额为100,000个请求。

所以我的问题归结为:我可以使用geocodeggmaps库中的R函数来ping Google Maps Geocoding API吗?

4 个答案:

答案 0 :(得分:14)

我已经写了一个包googleway来访问谷歌地图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"

答案 1 :(得分:14)

ggmap版本2.7或更高版本(截至12月13日,尚未在Cran上提供,但您可以使用devtools::install_github("dkahle/ggmap")安装,只需运行register_google(key = 'LONG KEY STRING')然后即可调用任何ggmap函数,例如geocodemutate_geocode,并使用您的API密钥。

答案 2 :(得分:6)

谢谢!它极大地帮助了我。 您的解决方案非常具体,因此我希望包含我对您的功能进行的调整。它引发了错误,因为raw_datageo_data_list未定义。我猜这些是特定于您当地的环境。

对我来说,输入一个位置并返回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

答案 3 :(得分:5)

我没有找到使用现有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")生成的列表具有相同的格式。