Использование ggmap для создания карт и постоянных ошибок R - PullRequest
0 голосов
/ 04 октября 2018

У меня есть кусок кода, который внезапно перестал работать.Так просто.Я нашел несколько неопределенных ответов на 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)

Есть идеи, что делать?

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Таким образом, есть две вещи, которые вызывают проблемы.

  1. ggmap использует Карты Google в качестве стандартного источника карт.API Карт Google, к которому ggmap подключается, требуется зарегистрированный ключ API Статических Карт.Вы можете получить (бесплатный) ключ API здесь , хотя учтите, что вам придется зарегистрировать биллинг, чтобы иметь возможность его использовать (если вы этого не сделаете, запросы API Карт вернут ошибку).Как только вы это настроите, вам нужно будет регистрировать его в каждом новом сеансе с помощью register_google(key = "...")

enter image description here

API Карт Google, к которому ggmap подключается, нужны координаты 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)

enter image description here

0 голосов
/ 05 октября 2018

У меня похожая проблема при загрузке карт с использованием 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
}
...