使用ggmap创建地图和持续错误R
Using ggmap to create maps and persistent error R
我有一段代码突然停止工作了。就如此容易。我在 SO 上找到了一些模糊的答案,但对我的情况没有任何帮助。
library(ggmap)
myLocation <- c(21.5, -18.5, 34, -8)
myMap <- get_map(location=myLocation,
source="google", maptype="terrain", crop=FALSE, color="bw")
我收到以下错误:
Warning: bounding box given to google - spatial extent only approximate.
converting bounding box to center/zoom specification. (experimental)
Error in download.file(url, destfile = tmp, quiet = !messaging, mode = "wb") :
cannot open URL 'http://maps.googleapis.com/maps/api/staticmap?center=-13.25,27.75&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=-13.25,27.75&zoom=6&size=640x640&scale=2&maptype=terrain&language=en-EN&sensor=false': HTTP status was '403 Forbidden'
试过这一行,但没有帮助:
options(download.file.method = "curl")
如果我尝试 osm - 还有问题:
osmmap <- get_openstreetmap(bbox = c(left = 21.5, bottom = -18.5, right =
34, top = 8), scale = 7, color = c("bw"))
Error: map grabbing failed - see details in ?get_openstreetmap.
In addition: There were 16 warnings (use warnings() to see them)
知道该怎么做吗?
我在使用 get_map 下载地图时遇到了类似的问题(403 Forbidden 和 OVER QUERY LIMIT)- 我通过使用 dput 保存地图解决了这个问题在计算机上和 dget 加载地图。
map <- get_map(location = myLocation, source="google", maptype="terrain", crop=FALSE, color="bw")
dput(map, file = "myMaps")
map <- dget(file = "myMaps")
现在如果您有多个地图要下载并且错误率很高,您可以使用带有 tryCatch 的循环来执行下载。
myLocation <- c(21.5, -18.5, 34, -8)
getMap <- function(loc){
map <- get_map(location = loc, source="google", maptype="terrain", crop=FALSE, color="bw")
i <<- 0
return(map)
}
i <- -1
c <- 0 # avoid infinite loop
while(i < 0 & c < 20){
tryCatch(map <- getMap(myLocation), error = function(w){
i <- -1
})
c <- c+1
}
所以这里有两件事导致了问题。
ggmap
使用 Google 地图作为其标准地图源。 ggmap
正在连接的 Google 地图 API 需要一个已注册的静态地图 API 密钥。您可以获得(免费)API 密钥 here,但请注意,您必须注册帐单才能使用(如果您不这样做,地图 API 请求将 return 一个错误)。完成设置后,您需要通过 register_google(key = "...")
在每个新会话中注册它
ggmap
正在连接的 Google 地图 API 需要 lon/lat 坐标(例如,location = c(-75.1636077,39.9524175))以完全 运行.
因此,您的完整代码为:
library(rjson)
library(digest)
library(glue)
library(devtools)
if(!requireNamespace("devtools")) install.packages("devtools")
devtools::install_github("dkahle/ggmap", ref = "tidyup")
library(ggmap)
register_google(key = "...", # your Static Maps API key
account_type = "standard")
map <- get_map(location = c(-75.1636077,39.9524175), zoom = 13)
ggmap(map)
我有一段代码突然停止工作了。就如此容易。我在 SO 上找到了一些模糊的答案,但对我的情况没有任何帮助。
library(ggmap)
myLocation <- c(21.5, -18.5, 34, -8)
myMap <- get_map(location=myLocation,
source="google", maptype="terrain", crop=FALSE, color="bw")
我收到以下错误:
Warning: bounding box given to google - spatial extent only approximate.
converting bounding box to center/zoom specification. (experimental)
Error in download.file(url, destfile = tmp, quiet = !messaging, mode = "wb") :
cannot open URL 'http://maps.googleapis.com/maps/api/staticmap?center=-13.25,27.75&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=-13.25,27.75&zoom=6&size=640x640&scale=2&maptype=terrain&language=en-EN&sensor=false': HTTP status was '403 Forbidden'
试过这一行,但没有帮助:
options(download.file.method = "curl")
如果我尝试 osm - 还有问题:
osmmap <- get_openstreetmap(bbox = c(left = 21.5, bottom = -18.5, right =
34, top = 8), scale = 7, color = c("bw"))
Error: map grabbing failed - see details in ?get_openstreetmap.
In addition: There were 16 warnings (use warnings() to see them)
知道该怎么做吗?
我在使用 get_map 下载地图时遇到了类似的问题(403 Forbidden 和 OVER QUERY LIMIT)- 我通过使用 dput 保存地图解决了这个问题在计算机上和 dget 加载地图。
map <- get_map(location = myLocation, source="google", maptype="terrain", crop=FALSE, color="bw")
dput(map, file = "myMaps")
map <- dget(file = "myMaps")
现在如果您有多个地图要下载并且错误率很高,您可以使用带有 tryCatch 的循环来执行下载。
myLocation <- c(21.5, -18.5, 34, -8)
getMap <- function(loc){
map <- get_map(location = loc, source="google", maptype="terrain", crop=FALSE, color="bw")
i <<- 0
return(map)
}
i <- -1
c <- 0 # avoid infinite loop
while(i < 0 & c < 20){
tryCatch(map <- getMap(myLocation), error = function(w){
i <- -1
})
c <- c+1
}
所以这里有两件事导致了问题。
ggmap
使用 Google 地图作为其标准地图源。ggmap
正在连接的 Google 地图 API 需要一个已注册的静态地图 API 密钥。您可以获得(免费)API 密钥 here,但请注意,您必须注册帐单才能使用(如果您不这样做,地图 API 请求将 return 一个错误)。完成设置后,您需要通过register_google(key = "...")
在每个新会话中注册它
ggmap
正在连接的 Google 地图 API 需要 lon/lat 坐标(例如,location = c(-75.1636077,39.9524175))以完全 运行.
因此,您的完整代码为:
library(rjson)
library(digest)
library(glue)
library(devtools)
if(!requireNamespace("devtools")) install.packages("devtools")
devtools::install_github("dkahle/ggmap", ref = "tidyup")
library(ggmap)
register_google(key = "...", # your Static Maps API key
account_type = "standard")
map <- get_map(location = c(-75.1636077,39.9524175), zoom = 13)
ggmap(map)