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

问题描述 投票:14回答:4

我正在尝试使用geocode中的ggmaps库中的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个请求。

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

r google-maps google-maps-api-2 geocode ggmap
4个回答
14
投票

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


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"

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


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")生成的列表具有相同的格式。

© www.soinside.com 2019 - 2024. All rights reserved.