我在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'
答案 0 :(得分:12)
您需要在R的每个新会话中使用register_google(key = "..."
)。在api_key =
调用中使用get_map()
无效。
更新:2018年12月24日适用于ggmap 2.7.904和当前的Google Cloud API
require(devtools)
devtools::install_github("dkahle/ggmap", ref = "tidyup")
您需要的API:静态地图和地理编码
在常规设置中启用计费。
library(ggmap)
register_google(key = "...") # copied directly from Google Console via 'copy' button
ggmap(get_googlemap())
ggmap(get_map("Hannover, Germany"))
如果您在此处遇到错误(例如,禁止访问403),则很可能您尚未为正确的API激活密钥。 Tutorial to troubleshoot geocoding
ggmap(get_map(location=c(16.3738,48.2082), zoom=13, scale=2))
答案 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/。
答案 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)
答案 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
希望对您有帮助!