module Datum where
import Ellipsoid
data Datum = Datum { name :: String 
                   , ellipsoid :: Ellipsoid 
                   
                   , dx :: Double
                   
                   , dy :: Double
                   
                   , dz :: Double
                   
                   , ds :: Double
                   
                   , rx :: Double
                   
                   , ry :: Double
                   
                   , rz :: Double
                   } deriving (Eq, Show)
etrf89Datum :: Datum
etrf89Datum = Datum { name = "European Terrestrial Reference Frame (ETRF89)"
                    , ellipsoid = wgs84Ellipsoid
                    , dx = 0.0
                    , dy = 0.0
                    , dz = 0.0
                    , ds = 0.0
                    , rx = 0.0
                    , ry = 0.0
                    , rz = 0.0
                    }
ireland1965Datum :: Datum
ireland1965Datum = Datum { name = "Ireland 1965"
                         , ellipsoid = modifiedAiryEllipsoid
                         , dx = 482.53
                         , dy = 130.596
                         , dz = 564.557
                         , ds = 8.15
                         , rx = 1.042
                         , ry = 0.214
                         , rz = 0.631
                         }
osgb36Datum :: Datum
osgb36Datum = Datum { name = "Ordnance Survey of Great Britain 1936 (OSGB36)"
                    , ellipsoid = airy1830Ellipsoid
                    , dx = 446.448
                    , dy = 125.157
                    , dz = 542.06
                    , ds = 20.4894
                    , rx = 0.1502
                    , ry = 0.2470
                    , rz = 0.8421
                    }
wgs84Datum :: Datum
wgs84Datum = Datum { name = "World Geodetic System 1984 (WGS84)"
                   , ellipsoid = wgs84Ellipsoid
                   , dx = 0.0
                   , dy = 0.0
                   , dz = 0.0
                   , ds = 1.0
                   , rx = 0.0
                   , ry = 0.0
                   , rz = 0.0
                   }
nad27GreenlandDatum :: Datum
nad27GreenlandDatum = Datum { name = "North American Datum 1927 (NAD27) - Greenland"
                            , ellipsoid = clarke1866Ellipsoid
                            , dx = 11.0
                            , dy = 114.0
                            , dz = 195.0
                            , ds = 0.0
                            , rx = 0.0
                            , ry = 0.0
                            , rz = 0.0
                            }
nad27WesternUSDatum :: Datum
nad27WesternUSDatum = Datum { name = "North American Datum 1927 (NAD27) - Western US"
                            , ellipsoid = clarke1866Ellipsoid
                            , dx = 8.0
                            , dy = 159.0
                            , dz = 175.0
                            , ds = 0.0
                            , rx = 0.0
                            , ry = 0.0
                            , rz = 0.0
                            }
nad27AlaskaDatum :: Datum
nad27AlaskaDatum = Datum { name = "North American Datum 1927 (NAD27) - Alaska"
                         , ellipsoid = clarke1866Ellipsoid
                         , dx = 5.0
                         , dy = 135.0
                         , dz = 172.0
                         , ds = 0.0
                         , rx = 0.0
                         , ry = 0.0
                         , rz = 0.0
                         }
nad27CentralAmericaDatum :: Datum
nad27CentralAmericaDatum = Datum { name = "North American Datum 1927 (NAD27) - Central America"
                                 , ellipsoid = clarke1866Ellipsoid
                                 , dx = 0.0
                                 , dy = 125.0
                                 , dz = 194.0
                                 , ds = 0.0
                                 , rx = 0.0
                                 , ry = 0.0
                                 , rz = 0.0
                                 }
nad27SanSalvadorDatum :: Datum
nad27SanSalvadorDatum = Datum { name = "North American Datum 1927 (NAD27) - San Salvador"
                              , ellipsoid = clarke1866Ellipsoid
                              , dx = 1.0
                              , dy = 140.0
                              , dz = 165.0
                              , ds = 0.0
                              , rx = 0.0
                              , ry = 0.0
                              , rz = 0.0
                              }
nad27AlbertaBritishColumbiaDatum :: Datum
nad27AlbertaBritishColumbiaDatum = Datum { name = "North American Datum 1927 (NAD27) - Alberta and British Columbia"
                                         , ellipsoid = clarke1866Ellipsoid
                                         , dx = 7.0
                                         , dy = 162.0
                                         , dz = 188.0
                                         , ds = 0.0
                                         , rx = 0.0
                                         , ry = 0.0
                                         , rz = 0.0
                                         }
nad27CanadaEastDatum :: Datum
nad27CanadaEastDatum = Datum { name = "North American Datum 1927 (NAD27) - Canada East"
                             , ellipsoid = clarke1866Ellipsoid
                             , dx = 22.0
                             , dy = 160.0
                             , dz = 190.0
                             , ds = 0.0
                             , rx = 0.0
                             , ry = 0.0
                             , rz = 0.0
                             }
nad27ContiguousUSDatum :: Datum
nad27ContiguousUSDatum = Datum { name = "North American Datum 1927 (NAD27) - Contiguous United States"
                               , ellipsoid = clarke1866Ellipsoid
                               , dx = 8.0
                               , dy = 160.0
                               , dz = 176.0
                               , ds = 0.0
                               , rx = 0.0
                               , ry = 0.0
                               , rz = 0.0
                               }
nad27MexicoDatum :: Datum
nad27MexicoDatum = Datum { name = "North American Datum 1927 (NAD27) - Mexico"
                         , ellipsoid = clarke1866Ellipsoid
                         , dx = 12.0
                         , dy = 130.0
                         , dz = 190.0
                         , ds = 0.0
                         , rx = 0.0
                         , ry = 0.0
                         , rz = 0.0
                         }
nad27BahamasDatum :: Datum
nad27BahamasDatum = Datum { name = "North American Datum 1927 (NAD27) - Bahamas"
                          , ellipsoid = clarke1866Ellipsoid
                          , dx = 4.0
                          , dy = 154.0
                          , dz = 178.0
                          , ds = 0.0
                          , rx = 0.0
                          , ry = 0.0
                          , rz = 0.0
                          }
nad27CanadaNWTerritoryDatum :: Datum
nad27CanadaNWTerritoryDatum = Datum { name = "North American Datum 1927 (NAD27) - Canada NW Territory"
                                    , ellipsoid = clarke1866Ellipsoid
                                    , dx = 4.0
                                    , dy = 159.0
                                    , dz = 188.0
                                    , ds = 0.0
                                    , rx = 0.0
                                    , ry = 0.0
                                    , rz = 0.0
                                    }
nad27CanadaManitobaOntarioDatum :: Datum
nad27CanadaManitobaOntarioDatum = Datum { name = "North American Datum 1927 (NAD27) - Canada Manitoba/Ontario"
                                        , ellipsoid = clarke1866Ellipsoid
                                        , dx = 9.0
                                        , dy = 157.0
                                        , dz = 184.0
                                        , ds = 0.0
                                        , rx = 0.0
                                        , ry = 0.0
                                        , rz = 0.0
                                        }
nad27CanadaDatum :: Datum
nad27CanadaDatum = Datum { name = "North American Datum 1927 (NAD27) - Canada"
                         , ellipsoid = clarke1866Ellipsoid
                         , dx = 10.0
                         , dy = 158.0
                         , dz = 187.0
                         , ds = 0.0
                         , rx = 0.0
                         , ry = 0.0
                         , rz = 0.0
                         }
nad27CanadaYukonDatum :: Datum
nad27CanadaYukonDatum = Datum { name = "North American Datum 1927 (NAD27) - Canada Yukon"
                              , ellipsoid = clarke1866Ellipsoid
                              , dx = 7.0
                              , dy = 139.0
                              , dz = 181.0
                              , ds = 0.0
                              , rx = 0.0
                              , ry = 0.0
                              , rz = 0.0
                              }
nad27CubaDatum :: Datum
nad27CubaDatum = Datum { name = "North American Datum 1927 (NAD27) - Cuba"
                       , ellipsoid = clarke1866Ellipsoid
                       , dx = 9.0
                       , dy = 152.0
                       , dz = 178.0
                       , ds = 0.0
                       , rx = 0.0
                       , ry = 0.0
                       , rz = 0.0
                       }
nad27AleutianWestDatum :: Datum
nad27AleutianWestDatum = Datum { name = "North American Datum 1927 (NAD27) - Aleutian West"
                               , ellipsoid = clarke1866Ellipsoid
                               , dx = 2.0
                               , dy = 204.0
                               , dz = 105.0
                               , ds = 0.0
                               , rx = 0.0
                               , ry = 0.0
                               , rz = 0.0
                               }
nad27AleutianEastDatum :: Datum
nad27AleutianEastDatum = Datum { name = "North American Datum 1927 (NAD27) - Aleutian East"
                               , ellipsoid = clarke1866Ellipsoid
                               , dx = 2.0
                               , dy = 152.0
                               , dz = 149.0
                               , ds = 0.0
                               , rx = 0.0
                               , ry = 0.0
                               , rz = 0.0
                               }
nad27CanalZoneDatum :: Datum
nad27CanalZoneDatum = Datum { name = "North American Datum 1927 (NAD27) - Canal Zone"
                            , ellipsoid = clarke1866Ellipsoid
                            , dx = 0.0
                            , dy = 125.0
                            , dz = 201.0
                            , ds = 0.0
                            , rx = 0.0
                            , ry = 0.0
                            , rz = 0.0
                            }
nad27EasternUSDatum :: Datum
nad27EasternUSDatum = Datum { name = "North American Datum 1927 (NAD27) - Eastern US"
                            , ellipsoid = clarke1866Ellipsoid
                            , dx = 9.0
                            , dy = 161.0
                            , dz = 179.0
                            , ds = 0.0
                            , rx = 0.0
                            , ry = 0.0
                            , rz = 0.0
                            }
nad27CaribbeanDatum :: Datum
nad27CaribbeanDatum = Datum { name = "North American Datum 1927 (NAD27) - Caribbean"
                            , ellipsoid = clarke1866Ellipsoid
                            , dx = 3.0
                            , dy = 142.0
                            , dz = 183.0
                            , ds = 0.0
                            , rx = 0.0
                            , ry = 0.0
                            , rz = 0.0
                            }