Вот функция, которая получит один адрес из API геокодирования Google Maps:
geocodeAddress <- function(address) {
base <- "https://maps.googleapis.com/maps/api/geocode/json?address="
key <- "your_google_maps_api_key_here"
url <- URLencode(paste0(base, address, "&key=", key))
RJSONIO::fromJSON(url, simplify=FALSE)
}
И как его использовать:
result <- geocodeAddress("1600 Amphitheatre Parkway Mountain View, CA 94043")
Вы можете вытащить только широту и lng, например:
result_lat <- result$results[[1]]$geometry$location$lat
result_lng <- result$results[[1]]$geometry$location$lng
Для ваших 30k адресов вы можете l oop поверх каждого отдельного. Более подробную информацию можно найти на developers.google.com . Последнее, что я проверил, есть ограничения на количество запросов в секунду и общее количество бесплатных запросов в день, но я подозреваю, что стоимость 30k не очень высока.
В качестве альтернативы вы можете загружать данные в формате csv формат в геокодер UCLA: gis.ucla.edu / geocoder .
Третья альтернатива - использовать геокодер Texas A&M: geoservices.tamu.edu .