-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Google Maps Geocoding API bindings -- -- The Google Maps Geocoding API provides a direct way to access -- geocoding and reverse geocoding services via an HTTP request. This -- library package provides bindings in Haskell to that API. -- -- NB: The use of the API's services is subject to the Google Maps -- APIs Terms of Service, which terms restrict the use of content (eg -- no use without a Google map). -- -- This package has no connection with Google Inc. or its affiliates. @package google-maps-geocoding @version 0.2.0.0 -- | This package has no connection with Google Inc. or its affiliates. -- -- The Google Maps Geocoding API provides a direct way to access -- geocoding and reverse geocoding services via an HTTP request. This -- library provides bindings in Haskell to that API. -- -- NB: The use of the Google Maps Geocoding API services is subject to -- the Google Maps APIs Terms of Service, which terms restrict the -- use of content (eg no use without a Google map). -- -- The components and optional parameters in a geocoding request -- are not yet implemented. The reverse geocoding request is not yet -- implemented. -- -- The code below is an example console application to test privately the -- use of the library with the Google Maps Geocoding API. -- --
-- {-# LANGUAGE OverloadedStrings #-}
--
-- module Main (main) where
--
-- import Data.Maybe (fromJust)
-- import Data.Text (Text)
-- import Data.Text.IO as T (getLine, putStr)
-- import Graphics.Gloss (Display (..), display, white)
-- import Graphics.Gloss.Juicy (fromDynamicImage)
-- import Network.HTTP.Client (Manager, newManager)
-- import Network.HTTP.Client.TLS (tlsManagerSettings)
-- import Web.Google.Maps.Geocoding (Address (..), geocode, GeocodingResponse (..),
-- Geometry (..), Key (..), Location (..), Result (..), Status (..))
-- import Web.Google.Static.Maps (Center (..), Size (..), staticmap, Zoom (..))
-- import System.IO (hFlush, stdout)
--
-- main :: IO ()
-- main = do
-- putStrLn "A test of the Google Maps Geocoding API.\nNB: The use of the \
-- \API services is subject to the Google Maps APIs Terms of Serivce at \
-- \https://developers.google.com/maps/terms.\n"
-- txt <- input "Enter full address: "
-- mgr <- newManager tlsManagerSettings
-- let apiKey = Key "<REPLACE_THIS_WITH_YOUR_ACTUAL_GOOGLE_API_KEY>"
-- result <- geocode mgr apiKey (Address txt)
-- case result of
-- Right response -> do
-- let s = status response
-- case s of
-- OK -> do
-- let center = Center $ location $ geometry $ head $
-- results response
-- print center
-- displayMap mgr apiKey center
-- _ -> putStrLn $ "Error! Status: " ++ show s
-- _ -> putStrLn $ "Error! Result:\n" ++ show result
--
-- input :: Text -> IO Text
-- input msg = T.putStr msg >> hFlush stdout >> T.getLine
--
-- displayMap :: Manager -> Key -> Center -> IO ()
-- displayMap mgr apiKey center = do
-- let zoom = Just $ Zoom 17
-- w = 400
-- h = 400
-- size = Size w h
-- result <- staticmap mgr apiKey Nothing (Just center) zoom size Nothing
-- Nothing [] Nothing [] [] Nothing
-- case result of
-- Right response -> do
-- let picture = fromJust $ fromDynamicImage response
-- title = "Test Google Maps Geocoding API"
-- window = InWindow title (w, h) (10, 10)
-- display window white picture
-- Left err -> putStrLn $ "Error while displaying map: " ++ show err
--
module Web.Google.Maps.Geocoding
-- | Geocode. NB: The use of the Google Maps Geocoding API services is
-- subject to the Google Maps APIs Terms of Service.
geocode :: Manager -> Key -> Address -> IO (Either ServantError GeocodingResponse)
-- | Google Translate API
type GoogleMapsGeocodingAPI = "geocode" :> ("json" :> (QueryParam "key" Key :> (QueryParam "address" Address :> Get '[JSON] GeocodingResponse)))
-- | API type
api :: Proxy GoogleMapsGeocodingAPI
-- | API key
newtype Key :: *
Key :: Text -> Key
-- | Address
newtype Address
Address :: Text -> Address
-- | Geocoding Reponse
data GeocodingResponse
GeocodingResponse :: Status -> Maybe Text -> [Result] -> GeocodingResponse
[status] :: GeocodingResponse -> Status
[error_message] :: GeocodingResponse -> Maybe Text
[results] :: GeocodingResponse -> [Result]
-- | Contains the status of the request and may contain debugging
-- information to help you track down why geocoding is not working.
data Status
-- | Indicates that no errors occurred; the address was successfully parsed
-- and at least one geocode was returned.
OK :: Status
-- | Indicates that the geocode was successful but returned no results.
-- This may occur if the geocoder was passed a non-existent address.
ZeroResults :: Status
OverQueryLimit :: Status
RequestDenied :: Status
-- | Generally indicates that the query (address, components or latlng) is
-- missing.
InvalidRequest :: Status
UnknownError :: Status
-- | A result of the geocoder.
data Result
Result :: [AddressType] -> Text -> [AddressComponent] -> Maybe [PostcodeLocality] -> Geometry -> Maybe Bool -> PlaceId -> Result
[types] :: Result -> [AddressType]
[formatted_address] :: Result -> Text
[address_components] :: Result -> [AddressComponent]
[postcode_localities] :: Result -> Maybe [PostcodeLocality]
[geometry] :: Result -> Geometry
[partial_match] :: Result -> Maybe Bool
[place_id] :: Result -> PlaceId
-- | Address (and address component) type: The list of types provided by
-- Google (as at 4 March 2017) is incomplete.
data AddressType
AddressType :: Text -> AddressType
-- | Address component
data AddressComponent
AddressComponent :: [AddressType] -> Text -> Text -> AddressComponent
[address_component_types] :: AddressComponent -> [AddressType]
[long_name] :: AddressComponent -> Text
[short_name] :: AddressComponent -> Text
-- | Postcode locality: a locality contained in a postal code.
newtype PostcodeLocality
PostcodeLocality :: Text -> PostcodeLocality
-- | Geometry
data Geometry
Geometry :: Location -> LocationType -> Viewport -> Maybe Viewport -> Geometry
[location] :: Geometry -> Location
[location_type] :: Geometry -> LocationType
[viewport] :: Geometry -> Viewport
[bounds] :: Geometry -> Maybe Viewport
-- | Place id
newtype PlaceId
PlaceId :: Text -> PlaceId
-- | Location: precision in latitude or longitude beyond 6 decimal places
-- is ignored.
data Location :: *
Location :: Double -> Double -> Location
-- | Takes any value between -90 and 90.
[lat] :: Location -> Double
-- | Takes any value between -180 and 180.
[lng] :: Location -> Double
-- | Location type
data LocationType
Rooftop :: LocationType
RangeInterpolated :: LocationType
GeometricCenter :: LocationType
Approximate :: LocationType
-- | Viewport
data Viewport
Viewport :: Location -> Location -> Viewport
[southwest] :: Viewport -> Location
[northeast] :: Viewport -> Location
instance GHC.Generics.Generic Web.Google.Maps.Geocoding.GeocodingResponse
instance GHC.Show.Show Web.Google.Maps.Geocoding.GeocodingResponse
instance GHC.Classes.Eq Web.Google.Maps.Geocoding.GeocodingResponse
instance GHC.Generics.Generic Web.Google.Maps.Geocoding.Result
instance GHC.Show.Show Web.Google.Maps.Geocoding.Result
instance GHC.Classes.Eq Web.Google.Maps.Geocoding.Result
instance GHC.Generics.Generic Web.Google.Maps.Geocoding.PlaceId
instance GHC.Show.Show Web.Google.Maps.Geocoding.PlaceId
instance GHC.Classes.Eq Web.Google.Maps.Geocoding.PlaceId
instance GHC.Generics.Generic Web.Google.Maps.Geocoding.Geometry
instance GHC.Show.Show Web.Google.Maps.Geocoding.Geometry
instance GHC.Classes.Eq Web.Google.Maps.Geocoding.Geometry
instance GHC.Generics.Generic Web.Google.Maps.Geocoding.Viewport
instance GHC.Show.Show Web.Google.Maps.Geocoding.Viewport
instance GHC.Classes.Eq Web.Google.Maps.Geocoding.Viewport
instance GHC.Show.Show Web.Google.Maps.Geocoding.LocationType
instance GHC.Classes.Eq Web.Google.Maps.Geocoding.LocationType
instance GHC.Generics.Generic Web.Google.Maps.Geocoding.PostcodeLocality
instance GHC.Show.Show Web.Google.Maps.Geocoding.PostcodeLocality
instance GHC.Classes.Eq Web.Google.Maps.Geocoding.PostcodeLocality
instance GHC.Generics.Generic Web.Google.Maps.Geocoding.AddressComponent
instance GHC.Show.Show Web.Google.Maps.Geocoding.AddressComponent
instance GHC.Classes.Eq Web.Google.Maps.Geocoding.AddressComponent
instance GHC.Generics.Generic Web.Google.Maps.Geocoding.AddressType
instance GHC.Show.Show Web.Google.Maps.Geocoding.AddressType
instance GHC.Classes.Eq Web.Google.Maps.Geocoding.AddressType
instance GHC.Show.Show Web.Google.Maps.Geocoding.Status
instance GHC.Classes.Eq Web.Google.Maps.Geocoding.Status
instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Geocoding.Address
instance GHC.Show.Show Web.Google.Maps.Geocoding.Address
instance GHC.Classes.Eq Web.Google.Maps.Geocoding.Address
instance Data.Aeson.Types.FromJSON.FromJSON Web.Google.Maps.Geocoding.GeocodingResponse
instance Data.Aeson.Types.FromJSON.FromJSON Web.Google.Maps.Geocoding.Status
instance Data.Aeson.Types.FromJSON.FromJSON Web.Google.Maps.Geocoding.Result
instance Data.Aeson.Types.FromJSON.FromJSON Web.Google.Maps.Geocoding.AddressType
instance Data.Aeson.Types.FromJSON.FromJSON Web.Google.Maps.Geocoding.AddressComponent
instance Data.Aeson.Types.FromJSON.FromJSON Web.Google.Maps.Geocoding.PostcodeLocality
instance Data.Aeson.Types.FromJSON.FromJSON Web.Google.Maps.Geocoding.Geometry
instance Data.Aeson.Types.FromJSON.FromJSON Web.Google.Maps.Geocoding.LocationType
instance Data.Aeson.Types.FromJSON.FromJSON Web.Google.Maps.Geocoding.Viewport
instance Data.Aeson.Types.FromJSON.FromJSON Web.Google.Maps.Geocoding.PlaceId