Current section
Files
Jump to
Current section
Files
lib/geocodex.ex
defmodule Geocodex do
@moduledoc """
Provides API wrappers for the Google Maps Geocoding API
See: https://developers.google.com/maps/documentation/geocoding/start
"""
alias Geocodex.{Api, Config}
@doc """
Returns address components for the given address
## Example
iex> Geocodex.address("1600 Amphitheatre Parkway, Mountain View, CA")
%{"results" => [%{"address_components" => [%{"long_name" => "Google Building 41",
"short_name" => "Google Bldg 41", "types" => ["premise"]},
%{"long_name" => "1600", "short_name" => "1600",
"types" => ["street_number"]},
%{"long_name" => "Amphitheatre Parkway",
"short_name" => "Amphitheatre Pkwy", "types" => ["route"]},
%{"long_name" => "Mountain View", "short_name" => "Mountain View",
"types" => ["locality", "political"]},
%{"long_name" => "Santa Clara County",
"short_name" => "Santa Clara County",
"types" => ["administrative_area_level_2", "political"]},
%{"long_name" => "California", "short_name" => "CA",
"types" => ["administrative_area_level_1", "political"]},
%{"long_name" => "United States", "short_name" => "US",
"types" => ["country", "political"]},
%{"long_name" => "94043", "short_name" => "94043",
"types" => ["postal_code"]}],
"formatted_address" => "Google Bldg 41, 1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA",
"geometry" => %{"bounds" => %{"northeast" => %{"lat" => 37.4228642,
"lng" => -122.0851557},
"southwest" => %{"lat" => 37.4221145, "lng" => -122.0859841}},
"location" => %{"lat" => 37.4224082, "lng" => -122.0856086},
"location_type" => "ROOFTOP",
"viewport" => %{"northeast" => %{"lat" => 37.4238383302915,
"lng" => -122.0842209197085},
"southwest" => %{"lat" => 37.4211403697085,
"lng" => -122.0869188802915}}},
"place_id" => "ChIJxQvW8wK6j4AR3ukttGy3w2s", "types" => ["premise"]}],
"status" => "OK"}
"""
def address(address) do
Api.get_by_address(address)
end
@doc """
Returns address components for the given coordinates
## Example
iex> Geocodex.coordinates(40.714224,-73.961452)
%{"results" => [%{"address_components" => [%{"long_name" => "277",
"short_name" => "277", "types" => ["street_number"]},
%{"long_name" => "Bedford Avenue", "short_name" => "Bedford Ave",
"types" => ["route"]},
%{"long_name" => "Williamsburg", "short_name" => "Williamsburg",
"types" => ["neighborhood", "political"]},
%{"long_name" => "Brooklyn", "short_name" => "Brooklyn",
"types" => ["political", "sublocality", "sublocality_level_1"]},
%{"long_name" => "Kings County", "short_name" => "Kings County",
"types" => ["administrative_area_level_2", "political"]},
%{"long_name" => "New York", "short_name" => "NY",
"types" => ["administrative_area_level_1", "political"]},
%{"long_name" => "United States", "short_name" => "US",
"types" => ["country", "political"]},
%{"long_name" => "11211", "short_name" => "11211",
"types" => ["postal_code"]}],
"formatted_address" => "277 Bedford Ave, Brooklyn, NY 11211, USA",
"geometry" => %{"location" => %{"lat" => 40.7142205, "lng" => -73.9612903},
"location_type" => "ROOFTOP",
"viewport" => %{"northeast" => %{"lat" => 40.71556948029149,
"lng" => -73.95994131970849},
"southwest" => %{"lat" => 40.7128715197085,
"lng" => -73.9626392802915}}},
"place_id" => "ChIJd8BlQ2BZwokRAFUEcm_qrcA",
"types" => ["street_address"]},
%{"address_components" => [%{"long_name" => "Grand St/Bedford Av",
"short_name" => "Grand St/Bedford Av",
"types" => ["bus_station", "establishment", "point_of_interest",
"transit_station"]},
%{"long_name" => "Williamsburg", "short_name" => "Williamsburg",
"types" => ["neighborhood", "political"]},
%{"long_name" => "Brooklyn", "short_name" => "Brooklyn",
"types" => ["political", "sublocality", "sublocality_level_1"]},
%{"long_name" => "Kings County", "short_name" => "Kings County",
"types" => ["administrative_area_level_2", "political"]},
%{"long_name" => "New York", "short_name" => "NY",
"types" => ["administrative_area_level_1", "political"]},
%{"long_name" => "United States", "short_name" => "US",
"types" => ["country", "political"]},
%{"long_name" => "11211", "short_name" => "11211",
"types" => ["postal_code"]}],
"formatted_address" => "Grand St/Bedford Av, Brooklyn, NY 11211, USA",
"geometry" => %{"location" => %{"lat" => 40.714321, "lng" => -73.961151},
"location_type" => "APPROXIMATE",
"viewport" => %{"northeast" => %{"lat" => 40.71566998029149,
"lng" => -73.95980201970849},
"southwest" => %{"lat" => 40.7129720197085,
"lng" => -73.96249998029151}}},
"place_id" => "ChIJi27VXGBZwokRM8ErPyB91yk",
"types" => ["bus_station", "establishment", "point_of_interest",
"transit_station"]},
%{"address_components" => [%{"long_name" => "Williamsburg",
"short_name" => "Williamsburg",
"types" => ["neighborhood", "political"]},
%{"long_name" => "Brooklyn", "short_name" => "Brooklyn",
"types" => ["political", "sublocality", "sublocality_level_1"]},
%{"long_name" => "New York", "short_name" => "New York",
"types" => ["locality", "political"]},
%{"long_name" => "Kings County", "short_name" => "Kings County",
"types" => ["administrative_area_level_2", "political"]},
%{"long_name" => "New York", "short_name" => "NY",
"types" => ["administrative_area_level_1", "political"]},
%{"long_name" => "United States", "short_name" => "US",
"types" => ["country", "political"]}],
"formatted_address" => "Williamsburg, Brooklyn, NY, USA",
"geometry" => %{"bounds" => %{"northeast" => %{"lat" => 40.7251773,
"lng" => -73.936498},
"southwest" => %{"lat" => 40.6979329, "lng" => -73.96984499999999}},
"location" => %{"lat" => 40.7081156, "lng" => -73.9570696},
"location_type" => "APPROXIMATE",
"viewport" => %{"northeast" => %{"lat" => 40.7251773,
"lng" => -73.936498},
"southwest" => %{"lat" => 40.6979329, "lng" => -73.96984499999999}}},
"place_id" => "ChIJQSrBBv1bwokRbNfFHCnyeYI",
"types" => ["neighborhood", "political"]},
%{"address_components" => [%{"long_name" => "Brooklyn",
"short_name" => "Brooklyn",
"types" => ["political", "sublocality", "sublocality_level_1"]},
%{"long_name" => "New York", "short_name" => "New York",
"types" => ["locality", "political"]},
%{"long_name" => "Kings County", "short_name" => "Kings County",
"types" => ["administrative_area_level_2", "political"]},
%{"long_name" => "New York", "short_name" => "NY",
"types" => ["administrative_area_level_1", "political"]},
%{"long_name" => "United States", "short_name" => "US",
"types" => ["country", "political"]}],
"formatted_address" => "Brooklyn, NY, USA",
"geometry" => %{"bounds" => %{"northeast" => %{"lat" => 40.739446,
"lng" => -73.8333651},
"southwest" => %{"lat" => 40.551042, "lng" => -74.05663}},
"location" => %{"lat" => 40.6781784, "lng" => -73.9441579},
"location_type" => "APPROXIMATE",
"viewport" => %{"northeast" => %{"lat" => 40.739446,
"lng" => -73.8333651},
"southwest" => %{"lat" => 40.551042, "lng" => -74.05663}}},
"place_id" => "ChIJCSF8lBZEwokRhngABHRcdoI",
"types" => ["political", "sublocality", "sublocality_level_1"]},
%{"address_components" => [%{"long_name" => "New York",
"short_name" => "New York", "types" => ["locality", "political"]},
%{"long_name" => "New York", "short_name" => "NY",
"types" => ["administrative_area_level_1", "political"]},
%{"long_name" => "United States", "short_name" => "US",
"types" => ["country", "political"]}],
"formatted_address" => "New York, NY, USA",
"geometry" => %{"bounds" => %{"northeast" => %{"lat" => 40.9175771,
"lng" => -73.70027209999999},
"southwest" => %{"lat" => 40.4773991, "lng" => -74.25908989999999}},
"location" => %{"lat" => 40.7127837, "lng" => -74.0059413},
"location_type" => "APPROXIMATE",
"viewport" => %{"northeast" => %{"lat" => 40.9152555,
"lng" => -73.70027209999999},
"southwest" => %{"lat" => 40.4960439, "lng" => -74.2557349}}},
"place_id" => "ChIJOwg_06VPwokRYv534QaPC8g",
"types" => ["locality", "political"]},
%{"address_components" => [%{"long_name" => "11211", "short_name" => "11211",
"types" => ["postal_code"]},
%{"long_name" => "Brooklyn", "short_name" => "Brooklyn",
"types" => ["political", "sublocality", "sublocality_level_1"]},
%{"long_name" => "New York", "short_name" => "New York",
"types" => ["locality", "political"]},
%{"long_name" => "New York", "short_name" => "NY",
"types" => ["administrative_area_level_1", "political"]},
%{"long_name" => "United States", "short_name" => "US",
"types" => ["country", "political"]}],
"formatted_address" => "Brooklyn, NY 11211, USA",
"geometry" => %{"bounds" => %{"northeast" => %{"lat" => 40.7280089,
"lng" => -73.9207299},
"southwest" => %{"lat" => 40.7008331, "lng" => -73.9644697}},
"location" => %{"lat" => 40.7093358, "lng" => -73.9565551},
"location_type" => "APPROXIMATE",
"viewport" => %{"northeast" => %{"lat" => 40.7280089,
"lng" => -73.9207299},
"southwest" => %{"lat" => 40.7008331, "lng" => -73.9644697}}},
"place_id" => "ChIJvbEjlVdZwokR4KapM3WCFRw", "types" => ["postal_code"]},
%{"address_components" => [%{"long_name" => "Kings County",
"short_name" => "Kings County",
"types" => ["administrative_area_level_2", "political"]},
%{"long_name" => "New York", "short_name" => "NY",
"types" => ["administrative_area_level_1", "political"]},
%{"long_name" => "United States", "short_name" => "US",
"types" => ["country", "political"]}],
"formatted_address" => "Kings County, NY, USA",
"geometry" => %{"bounds" => %{"northeast" => %{"lat" => 40.739446,
"lng" => -73.8333651},
"southwest" => %{"lat" => 40.551042, "lng" => -74.05663}},
"location" => %{"lat" => 40.6528762, "lng" => -73.95949399999999},
"location_type" => "APPROXIMATE",
"viewport" => %{"northeast" => %{"lat" => 40.7391407,
"lng" => -73.83363179999999},
"southwest" => %{"lat" => 40.5703742, "lng" => -74.0419592}}},
"place_id" => "ChIJOwE7_GTtwokRs75rhW4_I6M",
"types" => ["administrative_area_level_2", "political"]},
%{"address_components" => [%{"long_name" => "New York-Northern New Jersey-Long Island, NY-NJ-PA",
"short_name" => "New York-Northern New Jersey-Long Island, NY-NJ-PA",
"types" => ["political"]},
%{"long_name" => "United States", "short_name" => "US",
"types" => ["country", "political"]}],
"formatted_address" => "New York-Northern New Jersey-Long Island, NY-NJ-PA, USA",
"geometry" => %{"bounds" => %{"northeast" => %{"lat" => 41.6018065,
"lng" => -71.856214},
"southwest" => %{"lat" => 39.49853299999999, "lng" => -75.3585939}},
"location" => %{"lat" => 40.9590293, "lng" => -74.0300122},
"location_type" => "APPROXIMATE",
"viewport" => %{"northeast" => %{"lat" => 41.6018065,
"lng" => -71.856214},
"southwest" => %{"lat" => 39.49853299999999, "lng" => -75.3585939}}},
"place_id" => "ChIJ3YJV4PRWwokRFFI21ZrHXtQ", "types" => ["political"]},
%{"address_components" => [%{"long_name" => "New York Metropolitan Area",
"short_name" => "New York Metropolitan Area", "types" => ["political"]},
%{"long_name" => "United States", "short_name" => "US",
"types" => ["country", "political"]}],
"formatted_address" => "New York Metropolitan Area, USA",
"geometry" => %{"bounds" => %{"northeast" => %{"lat" => 42.0809059,
"lng" => -71.777491},
"southwest" => %{"lat" => 39.475198, "lng" => -75.3587649}},
"location" => %{"lat" => 40.7127761, "lng" => -74.0059544},
"location_type" => "APPROXIMATE",
"viewport" => %{"northeast" => %{"lat" => 42.0809059,
"lng" => -71.777491},
"southwest" => %{"lat" => 39.475198, "lng" => -75.3587649}}},
"place_id" => "ChIJ-5Z24NaGwokRiMh4Rj8FNMo", "types" => ["political"]},
%{"address_components" => [%{"long_name" => "New York", "short_name" => "NY",
"types" => ["administrative_area_level_1", "establishment",
"point_of_interest", "political"]},
%{"long_name" => "United States", "short_name" => "US",
"types" => ["country", "political"]}],
"formatted_address" => "New York, USA",
"geometry" => %{"bounds" => %{"northeast" => %{"lat" => 45.015865,
"lng" => -71.777491},
"southwest" => %{"lat" => 40.4773991, "lng" => -79.7625901}},
"location" => %{"lat" => 43.2994285, "lng" => -74.21793260000001},
"location_type" => "APPROXIMATE",
"viewport" => %{"northeast" => %{"lat" => 45.0125923,
"lng" => -71.8562029},
"southwest" => %{"lat" => 40.4961036, "lng" => -79.761996}}},
"place_id" => "ChIJqaUj8fBLzEwRZ5UY3sHGz90",
"types" => ["administrative_area_level_1", "establishment",
"point_of_interest", "political"]}], "status" => "OK"}
"""
def coordinates(latitude, longitude) do
Api.get_by_coordinates(latitude, longitude)
end
@doc """
Returns address components for the given place id,
this functionality is only available if an API key or a client ID is provided
## Example
iex> Geocodex.set_api_key("AIzaSyDo0s6h_njYpqsqMO8w6A12Nrpc5bMVyEs")
:ok
iex> Geocodex.place_id("ChIJrTLr-GyuEmsRBfy61i59si0")
%{"results" => [%{"address_components" => [%{"long_name" => "Sydney",
"short_name" => "Sydney",
"types" => ["locality", "political"]},
%{"long_name" => "New South Wales", "short_name" => "NSW",
"types" => ["administrative_area_level_1", "political"]},
%{"long_name" => "Australia", "short_name" => "AU",
"types" => ["country", "political"]},
%{"long_name" => "2000", "short_name" => "2000",
"types" => ["postal_code"]}],
"formatted_address" => "32 The Promenade, King Street Wharf 5, Sydney NSW 2000, Australia",
"geometry" => %{"location" => %{"lat" => -33.867591,
"lng" => 151.201196}, "location_type" => "APPROXIMATE",
"viewport" => %{"northeast" => %{"lat" => -33.86624201970849,
"lng" => 151.2025449802915},
"southwest" => %{"lat" => -33.86893998029149,
"lng" => 151.1998470197085}}},
"place_id" => "ChIJrTLr-GyuEmsRBfy61i59si0",
"types" => ["establishment", "food", "point_of_interest",
"restaurant", "travel_agency"]}], "status" => "OK"}
"""
def place_id(place_id) do
Api.get_by_place_id(place_id)
end
@doc """
Sets an api key to enable Premium features
## Example
iex> Geocodex.set_api_key("AIzaSyDo0s6h_njYpqsqMO8w6A12Nrpc5bMVyEs")
:ok
"""
def set_api_key(api_key) do
Config.api_key(api_key)
end
end