Google Map API (Geocoding API)

Through this document, I want to introduce the Geocoding API of Google Maps

Overview

Google Map API in general

Google Map API in general is set of tools that allow the users to integrate Google Maps into their websites or applications. For example:

Rental Housing off-campus
Rental Housing off-campus

An interactive map displayed in the rental housing website that shows students where exactly the housing is and how far it is from Xavier campus.

With a Google map API, there are many features the users could apply depend on their needs:

  • Maps Embed API: Allows you to embed a simple map on your site without much coding.

  • JavaScript API: Offers more flexibility and customization, allowing developers to create interactive maps, add markers, and handle events.

  • Geocoding API: Converts addresses into geographic coordinates (latitude and longitude) and vice versa, which is useful for location-based services.

  • Directions API: Provides directions between locations, including different modes of transportation like driving, walking, or biking.

  • Places API: Offers information about places, such as restaurants or landmarks, and allows for searches based on user queries.

Geocoding API introduction

Geocoding API is one of the featurs within the Google Maps API suite, which allows the users to convert addresses into geographic coordinates ( latitude and longitude). This is essential for many location-based applications. Once we have the geographic coordinates of a location, there are number of things we could do to advance our existing map or the applications, such as put it markers, distance calculations, and location searches, etc..

Election result map
Election result map

This election result map was built based on the voting precincts’ geographic coordinates. Therefore, we cannot really locate which neighborhood is more democrat or more republican since the areas are the precincts, not the exact neighborhood. With Geocoding API, we could grab the geographic coordinates of the neighborhoods that we want to pay attention to and put a marker on it.

Some feature of Geocoding API:

  • Address to Coordinates: Convert a physical address (like “1600 Amphitheatre Parkway, Mountain View, CA”) into latitude and longitude coordinates.

  • Coordinates to Address: Retrieve a human-readable address from geographic coordinates, useful for displaying user-friendly location information.

  • Reverse Geocoding: Quickly find nearby points of interest based on coordinates, enhancing user experience in navigation apps.

  • Batch Processing: Process multiple geocoding requests simultaneously, improving efficiency for applications that handle large datasets.

  • Localized Results: Get results tailored to specific languages and regions, enhancing accessibility for users around the world.

What are the variables in the data set of Geocoding?

  • Formatted_Address

  • Geometry bound Northeast: Longitude and latitude

  • Geometry bound Southwest: Longitude and latitude

  • The location longitude and latitude

  • etc.

Getting started - Geocoding API

Create a Google Cloud Project

First, we need to create an account with Google Cloud Console.

Then, we create a project to request an API key.

Enable the API

  • Go in the library of APIs

  • Choose the feature you want to use from the library

  • Enable the API key

Make Request

url_endpoint <- "https://maps.googleapis.com/maps/api/geocode/json?address="
api_key <- "AIzaSyDXRMvApU9_IruSChwLJO3uOfk_xmwSpRE"
address <- "Hydepark,Cincinnati"
ggmap_data <- GET(paste0(url_endpoint,URLencode(address),"&key=", api_key)) %>% 
  content( as = "text", encoding = "UTF-8") %>% 
  fromJSON() %>% 
  use_series(results)

This data set only has 1 row for the address/ location we request the information for. Hence, we could make a loop that grab the data of multiple location.

  • Create a function whose input are the API key and a vector containing the neighborhoods/ addresses/ locations we want to converse to geographic coordinates
addresses <- c("Hydepark,Cincinnati", "Norwood,Cincinnati")
make_url <- function(api_key, address){
  url_endpoint <- "https://maps.googleapis.com/maps/api/geocode/json?address="
  url <- paste0(url_endpoint,URLencode(address),"&key=", api_key)
}
  • The function get_data() to send the request to Google Map and transform the data into a typical data set
get_data <- function(api_key, address){
  url <- make_url(api_key, address)
  
  ggmap_data <- url %>% 
  GET() %>% 
  content(as = "text", encoding = "UTF-8") %>% 
  fromJSON() %>% 
  use_series(results)
  return(ggmap_data)
  }
  • Creating a function including a for loop to loop through the vector of addresses/locations, getting x data sets for x locations, and put them all together into 1 data set.
get_data_ml <- function(api_key, addresses){
  data_list <- list()
  for(x in addresses){
    data <- get_data(api_key, x)
    data_list[[x]] <- data
    Sys.sleep(1)
  }
  
  combined_data <- bind_rows(data_list) 
  
  return(combined_data)
}
  • Testing the function.
addresses <- c("Hydepark,Cincinnati", "Norwood,Cincinnati")
neighborhood <- get_data_ml(api_key="AIzaSyDXRMvApU9_IruSChwLJO3uOfk_xmwSpRE", addresses)