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

Increase the api limit in ggmap's geocode function (in R)

我正在尝试使用 Rggmaps 库中的 geocode 函数来获取特定位置的坐标。到目前为止,我可以很好地使用该功能。

我 运行 遇到的问题是我想将每日限额从 2,500 提高到 100,000。官方Googledocumentation 说如果您在项目上启用计费,这很容易实现,我很乐意这样做。当您继续此过程时,Google Developers Console 会为您提供一个个性化的 API 密钥。

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

Daily quota starting at 100,000 requests per 24 hours, based on annual contractual purchase.

所以我的问题归结为:我可以使用 Rggmaps 库中的 geocode 函数来 ping Google 地图地理编码 API?

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

谢谢!它极大地帮助了我。 您的解决方案非常具体,所以我想包括我对您的功能所做的改编。它引发了错误,因为 raw_datageo_data_list 未定义。我猜这些是您当地环境特有的。

对我来说,输入一个位置并 returning 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 以获得除经纬度以外的其他属性。

希望这对某人有所帮助。

R

我已经编写了包 googleway 来访问 google 地图 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"

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