The solution I found required using a REST API from here.com of the five options (below). I first cross-referenced FIPS codes from USGS table with County and State names using table fips_codes
from library(tigris)
. This gave me names to put together in address lines, like Boulder County, CO
. Next, I wrote a small function here_now
with sample usage as:
here_now("Boulder+County,+CO") # $lat: 40.08791; $lon: -105.3447
Implementation is a call to the REST API using fromJSON
from library(jsonlite)
here_now <- function(searchtext) {
AppCode <- getOption("hereAppCode")
AppID <- getOption("hereAppID")
rootURL <- "https://geocoder.api.here.com/6.2/geocode.json?"
app_id = paste("app_id", AppID, sep="=")
app_code = paste("app_code", AppCode, sep="=")
searchtext = paste("searchtext", searchtext, sep="=")
request <- paste(paste(rootURL, app_id, sep=''), app_code, searchtext, sep="&")
response = fromJSON(request)
res <- list()
res$lat <- response$Response$View$Result[[1]]$Location$NavigationPosition[[1]]$Latitude
res$lon <- response$Response$View$Result[[1]]$Location$NavigationPosition[[1]]$Longitude
res
}
Further, I used the FCC's reverse geo-coding API to validate: https://geo.fcc.gov/api/census/
Options I experimented with for geocoding included:
- google APIs via ggmap (requires API key, requires credit card)
- mapquest API (requires API key, no credit card needed)
- Data Science Toolkit's RDSK implementation
- Geonames service via eponymous R package
- Here APIs (require AppID and AppCode, freemium model)