(This article was first published on Jose Gonzalez » R, and kindly contributed to R-bloggers)
This post shows how to use Google Maps‘ API with R. Combine the first part with Plyr and it becomes a very powerful tool in just a few lines of code.
You can find a gist in RMarkdown with the code here or click below to continue reading.
#### This script uses RCurl and RJSONIO to download data from Google's API: #### Latitude, longitude, location type (see explanation at the end), formatted address #### Notice ther is a limit of 2,500 calls per day 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)) } else { return(c(NA,NA,NA, NA)) } } ##Test with a single address #address <- geoCode("The White House, Washington, DC") #address #[1] "38.8976831" #[2] "-77.0364972" #[3] "APPROXIMATE" #[4] "The White House, 1600 Pennsylvania Avenue Northwest, Washington, D.C., DC 20500, USA" # Use plyr to getgeocoding for a vector #address <- c("The White House, Washington, DC","The Capitol, Washington, DC") #locations <- ldply(address, function(x) geoCode(x)) #names(locations) <- c("lat","lon","location_type", "forAddress") #Location type, for more info check here: https://developers.google.com/maps/documentation/directions/ #"ROOFTOP" indicates that the returned result is a precise geocode for which we have location information accurate down to street address precision. #RANGE_INTERPOLATED" indicates that the returned result reflects an approximation (usually on a road) interpolated between two precise points (such as intersections). Interpolated results are generally returned when rooftop geocodes are unavailable for a street address. #GEOMETRIC_CENTER" indicates that the returned result is the geometric center of a result such as a polyline (for example, a street) or polygon (region). #APPROXIMATE" indicates that the returned result is approximate.
The post Using Google maps API and R appeared first on Jose Gonzalez.
To leave a comment for the author, please follow the link and comment on his blog: Jose Gonzalez » R.
R-bloggers.com offers daily e-mail updates about R news and tutorials on topics such as: visualization (ggplot2, Boxplots, maps, animation), programming (RStudio, Sweave, LaTeX, SQL, Eclipse, git, hadoop, Web Scraping) statistics (regression, PCA, time series, trading) and more...