labzero/elm-google-geocoding/2.0.0

NOTE: this package is not compatible with Elm 0.19.1

Geocoding

This library is an interface to Google's geocoding service

https://developers.google.com/maps/documentation/geocoding/intro

It provides a pipline friendly, builder-like API, and ADTs that map as closely as possible to the Google API

You can start building a request one of two ways:

Geocoding.requestForAddress apiKey "77 Battery St."
Geocoding.requestForComponents
  [
    ("Spain", Geocoding.CountryComponent)
  ]

Once you've built your request, calling send will return a Task, which you Perform to generate your own msg types

Types

type alias GeocodingResult =
{ addressComponents : List AddressComponent
, formattedAddress : String
, geometry : Geometry
, types : List ComponentType
, placeId : String
}

an individual result https://developers.google.com/maps/documentation/geocoding/intro#Results

type Status

mapping of Google API response statuses https://developers.google.com/maps/documentation/geocoding/intro#StatusCodes

type alias Viewport =
{ northeast : Location
, southwest : Location
}

a bounding box https://developers.google.com/maps/documentation/geocoding/intro#Viewports

type alias ApiKey =
String

alias for a Google API key

= RouteComponent
| LocalityComponent
| AdministrativeAreaComponent
| PostalCodeComponent
| CountryComponent

components for request filtering https://developers.google.com/maps/documentation/geocoding/intro#ComponentFiltering

= Rooftop
| RangeInterpolated
| GeometricCenter
| Approximate

additional data about a location https://developers.google.com/maps/documentation/geocoding/intro#Result

= StreetAddress
| Route
| Intersection
| Political
| Country
| AdministrativeAreaLevel1
| AdministrativeAreaLevel2
| AdministrativeAreaLevel3
| AdministrativeAreaLevel4
| AdministrativeAreaLevel5
| ColloquialArea
| Locality
| Sublocality
| SublocalityLevel1
| SublocalityLevel2
| SublocalityLevel3
| SublocalityLevel4
| SublocalityLevel5
| Neighborhood
| Premise
| Subpremise
| PostalCode
| NaturalFeature
| Airport
| Park
| PostBox
| StreetNumber
| Floor
| Room
| Establishment
| PointOfInterest
| Parking
| PostalTown
| BusStation
| TrainStation
| TransitStation
| PostalCodeSuffix
| OtherComponent

address component types https://developers.google.com/maps/documentation/geocoding/intro#Types

type alias Response =
{ status : Status
, results : List GeocodingResult
}

response status and a list of results (list will be empty if status is other than OK) https://developers.google.com/maps/documentation/geocoding/intro#GeocodingResponses

Building a request

requestForAddress : ApiKey -> String -> GeocodingRequest

Build a request for an address

Geocoding.requestForAddress apiKey "77 Battery St"
requestForComponents : ApiKey -> List ( String, Component ) -> GeocodingRequest

Build a request for a list of component filters

Geocoding.requestForComponents apiKey
  [
    ("Spain", Geocoding.CountryComponent)
  , ("Toledo", Geocoding.AdministrativeAreaComponent)
  ]
withAddress : String -> GeocodingRequest -> GeocodingRequest

set the address to a request. If called more than once, the later call overwrites the earlier

Geocoding.requestForComponents apiKey
  [
    ("Spain", Geocoding.CountryComponent)
  , ("Toledo", Geocoding.AdministrativeAreaComponent)
  ]
    |> Geocoding.withAddress "Toledo"
withComponent : ( String, Component ) -> GeocodingRequest -> GeocodingRequest

add a component filter to a request (can be called more than once for a request)

Geocoding.requestForAddress apiKey "Toledo" 
  |> Geocoding.withComponent ("Spain", Geocoding.CountryComponent)
withLanguage : String -> GeocodingRequest -> GeocodingRequest

Specify the language for the request

Geocoding.requestForAddress apiKey "77 Battery St"
  |> Geocoding.withLanguage("FR")
withRegion : String -> GeocodingRequest -> GeocodingRequest

specify region biasing for request

Geocoding.requestForAddress apiKey "Toledo" 
  |> Geocoding.withRegion "ES"
( Float, Float )
-> ( Float, Float )
-> GeocodingRequest
-> GeocodingRequest

Specify a viewport bias for the request

Geocoding.requestForAddress apiKey "Belmont"
  |> Geocoding.withBounds (41, -74) (42, -70)

Sending a request

send : GeocodingRequest -> Task Error Response

transform a request into a Task

Geocoding.requestForAddress apiKey "77 Battery St"
  |> Geocoding.send
  |> Task.perform MyFailureMsg MySuccessMsg

Inspecting a request

requestUrl : GeocodingRequest -> String

for inspecting the request URL for testing purposes