Мне нужно извлечь геокодировки на основе имен местоположений, которые у меня есть в векторе в R. Я наткнулся на этот код, который вызывает API Карт Google с указанным адресом и возвращает обратно координаты.Неудачные вызовы API Карт Google в R
library(RCurl)
library(RJSONIO)
library(plyr)
url <- function(address, return.call = "json", sensor = "false") {
root <- "http://maps.google.com/maps/api/geocode/"
u <- paste(root, return.call, "?address=", address, "&sensor=", sensor, sep= "")
return(URLencode(u))
}
geoCode <- function(address,verbose=FALSE) {
if(verbose) cat(address,"\n")
u <- url(address)
doc <- getURL(u)
x <- fromJSON(doc,simplify = FALSE)
if(x$status=="OK") {
lat <- x$results[[1]]$geometry$location$lat
lng <- x$results[[1]]$geometry$location$lng
location_type <- x$results[[1]]$geometry$location_type
formatted_address <- x$results[[1]]$formatted_address
return(c(lat, lng, location_type, formatted_address))
Sys.sleep(0.5)
} else {
return(c(NA,NA,NA, NA))
}
}
# address contains around 200 location names
locations <- ldply(address, function(x) geoCode(x))
Когда я бегу этот код, примерно половину записей, я получаю статус, отличный от «OK» и, следовательно, получать координаты как NA. Однако, когда я делаю вызов снова индивидуально, его выход прекращается.
Я могу перезапустить API индивидуально, но есть ли способ, которым это можно сделать эффективно? Образец json response.
Рассматривали ли вы с помощью 'геокода()' в 'ggmap' пакет? – jazzurro
У меня нет большой идеи о пакете ggmap. Вы проверите это. – Vinay