geocodeAddresses <- function(addresses, prev.results = NULL,
address.components = TRUE,
print.progress = TRUE, pause.time = 0.02,
progress.save.file = NULL) {
address.types <- c(
"subpremise", "premise", "street_number", "route",
"neighborhood, political",
"political, sublocality, sublocality_level_1",
"political, sublocality, sublocality_level_2",
"political, sublocality, sublocality_level_3",
"locality_political", "administrative_area_level_3, political",
"administrative_area_level_2, political",
"administrative_area_level_1, political", "country, political",
"postal_code")
if (is.null(prev.results)) {
out <- data.frame(lon = rep(NA, length(addresses)),
lat = rep(NA, length(addresses)))
if (address.components) {
for (i in address.types) {
out[[i]] <- NA
}
}
} else {
out <- prev.results
}
for (i in seq_along(addresses)) {
if (is.na(out$lon[i])) {
message("Geocoding location ", i, ": ", addresses[i])
res <- tryCatch(geocodeAddress(addresses[i], pause.time = pause.time),
error = function(e) {
message("Error, sleeping 30 seconds")
Sys.sleep(30)
geocodeAddress(addresses[i], pause.time = pause.time)
})
out$lon[i] <- res$crd[1]
out$lat[i] <- res$crd[2]
if (address.components) {
for (j in address.types) {
tmp <- res$address$long_name[res$address$type == j]
out[[j]][i] <- ifelse(length(tmp) == 0, NA, tmp[1])
}
}
if (!is.null(progress.save.file)) {
saveRDS(out,
file = paste0(gsub("\\.rds", "", progress.save.file), ".rds"))
}
}
}
return(out)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.