-- | This module exports the Geo type used to create read and facet queries. module Data.Factual.Shared.Geo ( -- * Geo type Lat , Long , Radius , Geo(..) -- * Helper functions , geoPair ) where -- | A Lat is the latitude represented as a Double. type Lat = Double -- | A Long is the longitude represented as a Double. type Long = Double -- | A Radius is the radius of the circle as a Double in meters. type Radius = Double -- | The Geo type is used to limit the search to specific geograph location. -- Currently, only circles are supported. Supply a latitude, longitude and -- radius in meters for the circle. data Geo = Circle Lat Long Radius | Point Lat Long deriving Eq -- Geo is a member of Show to help generate query params. instance Show Geo where show (Circle lat long radius) = "{\"$circle\":{\"$center\":[" ++ (show lat) ++ ", " ++ (show long) ++ "],\"$meters\":" ++ (show radius) ++ "}}" show (Point lat long) = "{\"$point\":[" ++ (show lat) ++ "," ++ (show long) ++ "]}" -- Helper functions geoPair :: Maybe Geo -> (String, String) geoPair (Just g) = ("geo", show g) geoPair Nothing = ("geo", "")