{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE TemplateHaskell #-} module Data.Geodetic.Ellipsoid( Ellipsoid(..) , HasEllipsoid(..) , flatteningReciprocal -- * Ellipsoids , wgs84 , grs80 , grs67 , ans , wgs72 , au1965 , krasovsky1940 , international1924 , hayford1909 , airy1830 , everest1830 , bessel1841 , clarke1858 , clarke1866 , clarke1880 ) where import Data.Geodetic.HasDoubles(HasDoubles(doubles)) import Papa data Ellipsoid = Ellipsoid { _semiMajor :: Double , _flattening :: Double } deriving (Eq, Ord, Show) makeClassy ''Ellipsoid instance HasDoubles Ellipsoid where doubles f (Ellipsoid s l) = Ellipsoid <$> f s <*> f l flatteningReciprocal :: HasEllipsoid e => Lens' e Double flatteningReciprocal = flattening . involuted (1/) wgs84 :: Ellipsoid wgs84 = Ellipsoid 6378137 298.257223563 grs80 :: Ellipsoid grs80 = Ellipsoid 6378137 298.257222101 grs67 :: Ellipsoid grs67 = Ellipsoid 6378160 298.25 ans :: Ellipsoid ans = Ellipsoid 6378160 298.25 wgs72 :: Ellipsoid wgs72 = Ellipsoid 6378135 298.26 au1965 :: Ellipsoid au1965 = Ellipsoid 6378160 298.25 krasovsky1940 :: Ellipsoid krasovsky1940 = Ellipsoid 6378245 298.3 international1924 :: Ellipsoid international1924 = Ellipsoid 6378388 297 hayford1909 :: Ellipsoid hayford1909 = international1924 airy1830 :: Ellipsoid airy1830 = Ellipsoid 6377563.4 299.32 everest1830 :: Ellipsoid everest1830 = Ellipsoid 6377276.3 300.8 bessel1841 :: Ellipsoid bessel1841 = Ellipsoid 6377397.2 299.15 clarke1858 :: Ellipsoid clarke1858 = Ellipsoid 6378293.645 294.26 clarke1866 :: Ellipsoid clarke1866 = Ellipsoid 6378206.4 294.98 clarke1880 :: Ellipsoid clarke1880 = Ellipsoid 6378249.145 293.465