module Data.Geo.GreatCircle( sphericalLaw ) where import Data.Geo.Sphere import Data.Geo.Coord import Data.Geo.Radians import Data.Geo.Accessor.Lat import Data.Geo.Accessor.Lon import Data.Geo.Accessor.Value sphericalLaw :: Sphere -> Coord -> Coord -> Double sphericalLaw s start end = let lat1 = toRadians (lat start) lat2 = toRadians (lat end) lon1 = toRadians (lon start) lon2 = toRadians (lon end) in acos (sin lat1 * sin lat2 + cos lat1 * cos lat2 * cos (lon2 - lon1)) * value s