我正在尝试使用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
中的ggmaps
library中的R
函数来ping Google Maps Geocoding API吗?
随着ggmap
版本2.7或更高版本(截至12月13日,尚未在Cran上提供,但你可以使用devtools::install_github("dkahle/ggmap")
安装,你只需要运行register_google(key = 'LONG KEY STRING')
然后你可以调用任何ggmap函数,如geocode
或mutate_geocode
并使用你的API键。
我已经编写了包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"
谢谢你!它极大地帮助了我。您的解决方案非常具体,因此我希望包含我对您的功能进行的调整。它抛出了错误,因为raw_data
和geo_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
我没有找到一种方法来使用现有的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")
生成的列表具有相同的格式。