-- | The @bounds@ element of a OSM file. module Geo.OSM.Bounds( Bounds, bounds ) where import Text.XML.HXT.Arrow import Geo.OSM.Util import Geo.OSM.Accessor.Minlat import Geo.OSM.Accessor.Maxlat import Geo.OSM.Accessor.Minlon import Geo.OSM.Accessor.Maxlon import Geo.OSM.Accessor.Origin -- | The @bounds@ element of a OSM file. data Bounds = Bounds String String String String (Maybe String) deriving Eq instance XmlPickler Bounds where xpickle = xpElem "bounds" (xpWrap (\(minlat', minlon', maxlat', maxlon', origin') -> Bounds minlat' minlon' maxlat' maxlon' origin', \(Bounds minlat' minlon' maxlat' maxlon' origin') -> (minlat', minlon', maxlat', maxlon', origin')) (xp5Tuple (xpAttr "minlat" xpText) (xpAttr "minlon" xpText) (xpAttr "maxlat" xpText) (xpAttr "maxlon" xpText) (xpOption (xpAttr "origin" xpText)))) instance Show Bounds where show = showPickled [] instance Minlat Bounds where minlat (Bounds x _ _ _ _) = x instance Minlon Bounds where minlon (Bounds _ x _ _ _) = x instance Maxlat Bounds where maxlat (Bounds _ _ x _ _) = x instance Maxlon Bounds where maxlon (Bounds _ _ _ x _) = x instance Origin Bounds where origin (Bounds _ _ _ _ x) = x -- | Constructs a bounds with a minlat, minlon, maxlat, maxlon and origin attributes. bounds :: String -- ^ The @minlat@ attribute. -> String -- ^ The @minlon@ attribute. -> String -- ^ The @maxlat@ attribute. -> String -- ^ The @maxlon@ attribute. -> Maybe String -- ^ The @origin@ attribute. -> Bounds bounds = Bounds