module Data.Geo.WKT.Types where
import GHC.Generics
import Data.Typeable
import Control.Lens
import Linear
data Parameter = Parameter { _paramName :: String
, _paramValue :: Double
}
deriving (Show, Eq, Ord, Typeable, Generic)
makeLenses ''Parameter
data Authority = Authority { _authorityName :: String
, _authorityCode :: String
}
deriving (Show, Eq, Ord, Typeable, Generic)
makeLenses ''Authority
data Unit = Unit { _unitName :: String
, _unitConversionFactor :: Double
, _unitAuthority :: Maybe Authority
}
deriving (Show, Eq, Ord, Typeable, Generic)
makeLenses ''Unit
data Spheroid = Spheroid { _spheroidName :: String
, _spheroidSemiMajor :: Double
, _spheroidInverseFlattening :: Double
, _spheroidAuthority :: Maybe Authority
}
deriving (Show, Eq, Ord, Typeable, Generic)
makeLenses ''Spheroid
data ToWGS84 = ToWGS84 { _towgs84D :: V3 Double
, _towgs84E :: V3 Double
, _towgs84PPM :: Double
}
deriving (Show, Eq, Ord, Typeable, Generic)
makeLenses ''ToWGS84
data Datum = Datum { _datumName :: String
, _datumSpheroid :: Spheroid
, _datumToWGS84 :: Maybe ToWGS84
, _datumAuthority :: Maybe Authority
}
deriving (Show, Eq, Ord, Typeable, Generic)
makeLenses ''Datum
data PrimeMeridian = PrimeMeridian { _primemName :: String
, _primemLongitude :: Double
, _primemAuthority :: Maybe Authority
}
deriving (Show, Eq, Ord, Typeable, Generic)
makeLenses ''PrimeMeridian
data AxisDirection = North | South | East | West | Up | Down | Other
deriving (Show, Eq, Ord, Typeable, Generic)
data Axis = Axis { _axisName :: String
, _axisDirection :: AxisDirection
}
deriving (Show, Eq, Ord, Typeable, Generic)
makeLenses ''Axis
data GeographicCS = GeogCS { _geogcsName :: String
, _geogcsDatum :: Datum
, _geogcsPrimeMeridian :: PrimeMeridian
, _geogcsAngularUnit :: Unit
, _geogcsTwinAxes :: Maybe (Axis, Axis)
, _geogcsAuthority :: Maybe Authority
}
deriving (Show, Eq, Ord, Typeable, Generic)
makeLenses ''GeographicCS
data Projection = Proj { _projName :: String
, _projAuthority :: Maybe Authority
}
deriving (Show, Eq, Ord, Typeable, Generic)
makeLenses ''Projection
data ProjectedCS = ProjCS { _projcsName :: String
, _projcsGeographicCS :: GeographicCS
, _projcsProjection :: Projection
, _projcsParameters :: [Parameter]
, _projcsLinearUnit :: Unit
, _projcsTwinAxes :: Maybe (Axis, Axis)
, _projcsAuthority :: Maybe Authority
}
deriving (Show, Eq, Ord, Typeable, Generic)
makeLenses ''ProjectedCS