get_map未传递API密钥(HTTP状态为“ 403禁止”)

时间:2018-09-29 05:40:17

标签: r google-maps google-maps-api-3 ggmap

我在R的get_map()函数(ggmap库)中遇到了这个问题。

我的代码运行了几个月,无需指定API密钥(用于source = "google")。但是,代码在几周后停止工作。我了解到Google已将API密钥设为强制性的(或者在没有我用尽的api密钥的情况下,他们允许一定数量的调用)。

但是,即使指定了API密钥(从Google Cloud Platform获得),我的代码仍会以相同的方式运行。我什至联系了Google Cloud Support,但是他们说API密钥本身没有什么问题,他们可以在最后调用地图。

我怀疑从Google调用地图时,get_map()函数没有通过api_key。任何有关分辨率的指标将不胜感激。

下面是可复制的代码(失败)。

library(ggmap)

lat <- c(4,41)  # India lat boundaries
lon <- c(68,99) # India long boundaries
center = c(mean(lat), mean(lon))

map <- get_map(location = c(lon = mean(lon), 
                            lat = mean(lat)),
               api_key = <my api key>,
               zoom = 6,
               maptype = "terrain",
               source = "google",
               messaging = TRUE
)

下面是R中的错误消息(请注意未传递API密钥)

trying URL 'http://maps.googleapis.com/maps/api/staticmap?center=22.5,83.5&zoom=6&size=640x640&scale=2&maptype=terrain&language=en-EN&sensor=false'
Error in download.file(url, destfile = tmp, quiet = !messaging, mode = "wb") : 
  cannot open URL 'http://maps.googleapis.com/maps/api/staticmap?center=22.5,83.5&zoom=6&size=640x640&scale=2&maptype=terrain&language=en-EN&sensor=false'
In addition: Warning message:
In download.file(url, destfile = tmp, quiet = !messaging, mode = "wb") :
  cannot open URL 'http://maps.googleapis.com/maps/api/staticmap?center=22.5,83.5&zoom=6&size=640x640&scale=2&maptype=terrain&language=en-EN&sensor=false': HTTP status was '403 Forbidden'

4 个答案:

答案 0 :(得分:12)

您需要在R的每个新会话中使用register_google(key = "...")。在api_key =调用中使用get_map()无效。


更新:2018年12月24日适用于ggmap 2.7.904和当前的Google Cloud API

分步教程

1。更新到最新版本的ggmap

require(devtools)
devtools::install_github("dkahle/ggmap", ref = "tidyup")

2。在Google Cloud Console中为所有API激活您的Google API密钥

enter image description here

enter image description here

3。加载ggmap并注册密钥

library(ggmap)
register_google(key = "...")     # copied directly from Google Console via 'copy' button

4。绘制默认地图

ggmap(get_googlemap())          

Houston

5。带有位置名称的图(地理编码)

ggmap(get_map("Hannover, Germany"))
  

如果您在此处遇到错误(例如,禁止访问403),则很可能您尚未为正确的API激活密钥。 Tutorial to troubleshoot geocoding

Hannover

6。绘制经度和​​纬度

ggmap(get_map(location=c(16.3738,48.2082), zoom=13, scale=2))

3

答案 1 :(得分:6)

只需添加到Roman Abashin的答案中(不幸的是,我无法评论):根据'?get_map()','api_key ='参数不适用于Google地图。您需要使用'register_google()'函数,但是从03/10/18开始,它仅在ggmap的开发版本中,您可以这样获得:

devtools::install_github("dkahle/ggmap", ref = "tidyup")

然后,尽管每个月使用的前100,000张地图应该是免费的,但您还需要在Google帐户上启用计费功能,详情请参见https://cloud.google.com/maps-platform/pricing/sheet/

(从此处提取提示:https://github.com/dkahle/ggmap/issues/51

答案 2 :(得分:4)

我不知道ggmap问题的直接解决方案,但是如果您愿意使用交互式地图而不是静态地图,可以使用我的googelway

library(googleway)

set_key("GOOGLE_MAP_KEY")

lat <- c(4,41) #India lat boundaries
lon <- c(68,99) #India long boundaries
center = c(mean(lat), mean(lon))

google_map(location = center, zoom = 6)

enter image description here

答案 3 :(得分:2)

只需添加到@Roman的响应中,以下是对我有用的代码:

if(!requireNamespace("devtools")) install.packages("devtools")
devtools::install_github("dkahle/ggmap", ref = "tidyup")
library(ggmap)
register_google(key = "your_API_key") 
usa<- get_googlemap(location='united states', zoom=4,maptype = "hybrid")

有关更多信息,请参考github上的库页面:here
希望对您有帮助!