hcoord-1.0.0.0: src/Datum.hs
module Datum where
import Ellipsoid
{- |
To represent a set of parameters for describing a particular datum,
including a name, the reference ellipsoid used and the seven parameters
required to translate co-ordinates in this datum to the WGS84 datum.
-}
data Datum = Datum { name :: String -- ^ The name of this Datum.
, ellipsoid :: Ellipsoid -- ^ The reference ellipsoid associated with this Datum.
{-|
Translation along the x-axis for use in 7-parameter Helmert
transformations. This value should be used to convert a co-ordinate in a
given datum to the WGS84 datum.
-}
, dx :: Double
{-|
Translation along the y-axis for use in 7-parameter Helmert
transformations. This value should be used to convert a co-ordinate in a
given datum to the WGS84 datum.
-}
, dy :: Double
{-|
Translation along the z-axis for use in 7-parameter Helmert
transformations. This value should be used to convert a co-ordinate in a
given datum to the WGS84 datum.
-}
, dz :: Double
{-|
Scale factor for use in 7-parameter Helmert transformations. This value
should be used to convert a co-ordinate in a given datum to the WGS84
datum.
-}
, ds :: Double
{-|
Rotation about the x-axis for use in 7-parameter Helmert transformations.
This value should be used to convert a co-ordinate in a given datum to the
WGS84 datum.
-}
, rx :: Double
{-|
Rotation about the y-axis for use in 7-parameter Helmert transformations.
This value should be used to convert a co-ordinate in a given datum to the
WGS84 datum.
-}
, ry :: Double
{-|
Rotation about the z-axis for use in 7-parameter Helmert transformations.
This value should be used to convert a co-ordinate in a given datum to the
WGS84 datum.
-}
, rz :: Double
} deriving (Eq, Show)
-- instance Show Datum where
-- show Datum{name = n, ellipsoid = ell, dx = dx, dy = dy, dz = dz,
-- ds = ds, rx = rx, ry = ry, rz = rz} =
-- n ++ " " ++ show ell ++ " dx=" ++ show dx ++ " dy=" ++ show dy ++
-- " dz=" ++ show dz ++ " ds=" ++ show ds ++ " rx=" ++ show rx ++ " ry=" ++ show ry ++ " rz=" ++ show rz
-- | Pre-determined data:
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
}