module Data.Geo.Geodetic.Ellipsoid(
Ellipsoid
, AsEllipsoid(..)
, AsSemiMajor(..)
, AsSemiMinor(..)
, AsFlattening(..)
, AsInverseFlattening(..)
, semiMajorFlattening
, semiMinorFlattening
, semiMajorInverseFlattening
, semiMinorInverseFlattening
, wgs84
, grs80
, grs67
, ans
, wgs72
, au1965
, krasovsky1940
, international1924
, hayford1909
, airy1830
, everest1830
, bessel1841
, clarke1858
, clarke1866
, clarke1880
) where
import Control.Category(Category(id))
import Data.Eq(Eq)
import Data.Functor(Functor)
import Data.Ord(Ord)
import Prelude(Show, Num((*), ()), Fractional((/)), Double)
import Control.Lens(Optic', lens)
data Ellipsoid =
Ellipsoid
Double
Double
deriving (Eq, Ord, Show)
semiMajorFlattening ::
Double
-> Double
-> Ellipsoid
semiMajorFlattening =
Ellipsoid
semiMinorFlattening ::
Double
-> Double
-> Ellipsoid
semiMinorFlattening s f =
Ellipsoid (s * f 1.0) f
semiMajorInverseFlattening ::
Double
-> Double
-> Ellipsoid
semiMajorInverseFlattening s f =
semiMajorFlattening s (1/f)
semiMinorInverseFlattening ::
Double
-> Double
-> Ellipsoid
semiMinorInverseFlattening s f =
semiMinorFlattening s (1/f)
class AsEllipsoid p f s where
_Ellipsoid ::
Optic' p f s Ellipsoid
instance AsEllipsoid p f Ellipsoid where
_Ellipsoid =
id
class AsSemiMajor p f s where
_SemiMajor ::
Optic' p f s Double
instance AsSemiMajor p f Double where
_SemiMajor =
id
instance (p ~ (->), Functor f) => AsSemiMajor p f Ellipsoid where
_SemiMajor =
lens (\(Ellipsoid s _) -> s) (\(Ellipsoid _ f) s -> Ellipsoid s f)
class AsSemiMinor p f s where
_SemiMinor ::
Optic' p f s Double
instance AsSemiMinor p f Double where
_SemiMinor =
id
instance (p ~ (->), Functor f) => AsSemiMinor p f Ellipsoid where
_SemiMinor =
lens (\(Ellipsoid s f) -> (1.0 f) * s) (\(Ellipsoid _ f) s -> Ellipsoid (s * f 1.0) f)
class AsFlattening p f s where
_Flattening ::
Optic' p f s Double
instance AsFlattening p f Double where
_Flattening =
id
instance (p ~ (->), Functor f) => AsFlattening p f Ellipsoid where
_Flattening =
lens (\(Ellipsoid _ f) -> f) (\(Ellipsoid s _) f -> Ellipsoid s f)
class AsInverseFlattening p f s where
_InverseFlattening ::
Optic' p f s Double
instance AsInverseFlattening p f Double where
_InverseFlattening =
id
instance (p ~ (->), Functor f) => AsInverseFlattening p f Ellipsoid where
_InverseFlattening =
lens (\(Ellipsoid _ f) -> f) (\(Ellipsoid s _) f -> Ellipsoid s f)
wgs84 ::
Ellipsoid
wgs84 =
semiMajorInverseFlattening 6378137 298.257223563
grs80 ::
Ellipsoid
grs80 =
semiMajorInverseFlattening 6378137 298.257222101
grs67 ::
Ellipsoid
grs67 =
semiMajorInverseFlattening 6378160 298.25
ans ::
Ellipsoid
ans =
semiMajorInverseFlattening 6378160 298.25
wgs72 ::
Ellipsoid
wgs72 =
semiMajorInverseFlattening 6378135 298.26
au1965 ::
Ellipsoid
au1965 =
semiMajorInverseFlattening 6378160 298.25
krasovsky1940 ::
Ellipsoid
krasovsky1940 =
semiMajorInverseFlattening 6378245 298.3
international1924 ::
Ellipsoid
international1924 =
semiMajorInverseFlattening 6378388 297
hayford1909 ::
Ellipsoid
hayford1909 =
international1924
airy1830 ::
Ellipsoid
airy1830 =
semiMajorInverseFlattening 6377563.4 299.32
everest1830 ::
Ellipsoid
everest1830 =
semiMajorInverseFlattening 6377276.3 300.8
bessel1841 ::
Ellipsoid
bessel1841 =
semiMajorInverseFlattening 6377397.2 299.15
clarke1858 ::
Ellipsoid
clarke1858 =
semiMajorInverseFlattening 6378293.645 294.26
clarke1866 ::
Ellipsoid
clarke1866 =
semiMajorInverseFlattening 6378206.4 294.98
clarke1880 ::
Ellipsoid
clarke1880 =
semiMajorInverseFlattening 6378249.145 293.465