diff --git a/coordinate.cabal b/coordinate.cabal
--- a/coordinate.cabal
+++ b/coordinate.cabal
@@ -1,5 +1,5 @@
 name:               coordinate
-version:            0.0.4
+version:            0.0.5
 license:            BSD3
 license-File:       etc/LICENCE
 author:             Tony Morris <ʇǝu˙sıɹɹoɯʇ@ןןǝʞsɐɥ>
diff --git a/src/Data/Geo/Coordinate/Latitude.hs b/src/Data/Geo/Coordinate/Latitude.hs
--- a/src/Data/Geo/Coordinate/Latitude.hs
+++ b/src/Data/Geo/Coordinate/Latitude.hs
@@ -3,16 +3,17 @@
 , HasLatitude(..)
 , dmsLatitude
 , fracLatitude
+, radianLatitude
 ) where
 
-import Prelude(Double, Eq, Show, Ord(..), Num(..), Bool(..), Monad(..), id, (&&), properFraction, fromIntegral)
+import Prelude(Double, Eq, Show, Ord(..), Num(..), Floating(..), Fractional(..), Bool(..), Monad(..), id, (&&), (.), properFraction, fromIntegral)
 import Control.Lens(Iso', Prism', Lens', iso, prism', lens, (#), (^?))
 import Data.Geo.Coordinate.DegreesLatitude
 import Data.Geo.Coordinate.Minutes
 import Data.Geo.Coordinate.Seconds
 
 -- $setup
--- >>> import Control.Lens((^?))
+-- >>> import Prelude(Functor(..))
 
 data Latitude =
   Latitude
@@ -43,12 +44,18 @@
 --
 -- >>> do deg <- 89 ^? nDegreesLatitude; min <- 59 ^? nMinutes; sec <- 60 ^? nSeconds; (deg, min, sec) ^? dmsLatitude
 -- Nothing
+--
+-- >>> fmap (dmsLatitude #)  (7 ^? fracLatitude)
+-- Just (DegreesLatitude 7,Minutes 0,Seconds 0.0000)
+--
+-- >>> fmap (dmsLatitude #)  (7.12 ^? fracLatitude)
+-- Just (DegreesLatitude 7,Minutes 7,Seconds 12.0000)
 dmsLatitude ::
   Iso' (DegreesLatitude, Minutes, Seconds) Latitude
 dmsLatitude =
   iso (\(d, m, s) -> Latitude d m s) (\(Latitude d m s) -> (d, m, s))
 
--- | A prism on latitude to a double between -90 and 90 inclusive.
+-- | A prism on latitude to a double between -90 and 90 exclusive.
 --
 -- >>> 7 ^? fracLatitude
 -- Just (Latitude (DegreesLatitude 7) (Minutes 0) (Seconds 0.0000))
@@ -76,17 +83,53 @@
 --
 -- >>> 89.2 ^? fracLatitude
 -- Just (Latitude (DegreesLatitude 89) (Minutes 12) (Seconds 0.0000))
+--
+-- >>> fmap (fracLatitude #) (do deg <- 7 ^? nDegreesLatitude; min <- 7 ^? nMinutes; sec <- 7 ^? nSeconds; (deg, min, sec) ^? dmsLatitude)
+-- Just 7.118611111111111
+--
+-- >>> fmap (fracLatitude #) (do deg <- 89 ^? nDegreesLatitude; min <- 15 ^? nMinutes; sec <- 6 ^? nSeconds; (deg, min, sec) ^? dmsLatitude)
+-- Just 89.25166666666667
 fracLatitude ::
   Prism' Double Latitude
 fracLatitude =
   prism' (\(Latitude d m s) ->
-    fromIntegral (nDegreesLatitude # d) + nSeconds # s + fromIntegral (nMinutes # m * 60))
+    fromIntegral (nDegreesLatitude # d) + (fromIntegral (nMinutes # m) / 60) + (nSeconds # s) / 3600)
     (\x -> let (d, z) = properFraction x
                (m, s) = properFraction ((z :: Double) * 60)
            in do d' <- d ^? nDegreesLatitude
                  m' <- abs m ^? nMinutes
                  s' <- (abs s * 60) ^? nSeconds
                  return (Latitude d' m' s'))
+
+-- | A prism on latitude to a double between -π/2 and π/2 exclusive.
+--
+-- >>> 0.2 ^? radianLatitude
+-- Just (Latitude (DegreesLatitude 11) (Minutes 27) (Seconds 32.9612))
+--
+-- >>> 1.3 ^? radianLatitude
+-- Just (Latitude (DegreesLatitude 74) (Minutes 29) (Seconds 4.2481))
+--
+-- >>> (-1.3) ^? radianLatitude
+-- Just (Latitude (DegreesLatitude (-74)) (Minutes 29) (Seconds 4.2481))
+--
+-- >>> 1.5707963 ^? radianLatitude
+-- Just (Latitude (DegreesLatitude 89) (Minutes 59) (Seconds 59.9945))
+--
+-- >>> 1.58 ^? radianLatitude
+-- Nothing
+--
+-- >>> (-1.58) ^? radianLatitude
+-- Nothing
+--
+-- >>> fmap (radianLatitude #) (do deg <- 7 ^? nDegreesLatitude; min <- 7 ^? nMinutes; sec <- 7 ^? nSeconds; (deg, min, sec) ^? dmsLatitude)
+-- Just 0.12424320205794079
+--
+-- >>> fmap (radianLatitude #) (do deg <- 89 ^? nDegreesLatitude; min <- 15 ^? nMinutes; sec <- 6 ^? nSeconds; (deg, min, sec) ^? dmsLatitude)
+-- Just 1.5577354462258057
+radianLatitude ::
+  Prism' Double Latitude
+radianLatitude =
+  iso (\n -> n * 180 / pi) (\n -> n * pi / 180) . fracLatitude
 
 class HasLatitude t where
   latitude ::
diff --git a/src/Data/Geo/Coordinate/Longitude.hs b/src/Data/Geo/Coordinate/Longitude.hs
--- a/src/Data/Geo/Coordinate/Longitude.hs
+++ b/src/Data/Geo/Coordinate/Longitude.hs
@@ -3,14 +3,18 @@
 , HasLongitude(..)
 , dmsLongitude
 , fracLongitude
+, radianLongitude
 ) where
 
-import Prelude(Double, Eq, Show, Ord(..), Num(..), Bool(..), Monad(..), id, (&&), properFraction, fromIntegral)
+import Prelude(Double, Eq, Show, Ord(..), Num(..), Floating(..), Fractional(..), Bool(..), Monad(..), id, (&&), (.), properFraction, fromIntegral)
 import Control.Lens(Iso', Prism', Lens', iso, prism', lens, (#), (^?))
 import Data.Geo.Coordinate.DegreesLongitude
 import Data.Geo.Coordinate.Minutes
 import Data.Geo.Coordinate.Seconds
 
+-- $setup
+-- >>> import Prelude(Functor(..))
+
 data Longitude =
   Longitude
     DegreesLongitude
@@ -40,12 +44,18 @@
 --
 -- >>> do deg <- 179 ^? nDegreesLongitude; min <- 59 ^? nMinutes; sec <- 60 ^? nSeconds; (deg, min, sec) ^? dmsLongitude
 -- Nothing
+--
+-- >>> fmap (dmsLongitude #)  (7 ^? fracLongitude)
+-- Just (DegreesLongitude 7,Minutes 0,Seconds 0.0000)
+--
+-- >>> fmap (dmsLongitude #)  (7.12 ^? fracLongitude)
+-- Just (DegreesLongitude 7,Minutes 7,Seconds 12.0000)
 dmsLongitude ::
   Iso' (DegreesLongitude, Minutes, Seconds) Longitude
 dmsLongitude =
   iso (\(d, m, s) -> Longitude d m s) (\(Longitude d m s) -> (d, m, s))
 
--- | A prism on longitude to a double between -180 and 180 inclusive.
+-- | A prism on longitude to a double between -180 and 180 exclusive.
 --
 -- >>> 7 ^? fracLongitude
 -- Just (Longitude (DegreesLongitude 7) (Minutes 0) (Seconds 0.0000))
@@ -73,17 +83,53 @@
 --
 -- >>> 179.2 ^? fracLongitude
 -- Just (Longitude (DegreesLongitude 179) (Minutes 11) (Seconds 60.0000))
+--
+-- >>> fmap (fracLongitude #) (do deg <- 7 ^? nDegreesLongitude; min <- 7 ^? nMinutes; sec <- 7 ^? nSeconds; (deg, min, sec) ^? dmsLongitude)
+-- Just 7.118611111111111
+--
+-- >>> fmap (fracLongitude #) (do deg <- 179 ^? nDegreesLongitude; min <- 15 ^? nMinutes; sec <- 6 ^? nSeconds; (deg, min, sec) ^? dmsLongitude)
+-- Just 179.25166666666667
 fracLongitude ::
   Prism' Double Longitude
 fracLongitude =
   prism' (\(Longitude d m s) ->
-    fromIntegral (nDegreesLongitude  # d) + nSeconds # s + fromIntegral (nMinutes # m * 60))
+    fromIntegral (nDegreesLongitude # d) + (fromIntegral (nMinutes # m) / 60) + (nSeconds # s) / 3600)
     (\x -> let (d, z) = properFraction x
                (m, s) = properFraction ((z :: Double) * 60)
            in do d' <- d ^? nDegreesLongitude
                  m' <- abs m ^? nMinutes
                  s' <- (abs s * 60) ^? nSeconds
                  return (Longitude d' m' s'))
+
+-- | A prism on longitude to a double between -π and π exclusive.
+--
+-- >>> 0.2 ^? radianLongitude
+-- Just (Longitude (DegreesLongitude 11) (Minutes 27) (Seconds 32.9612))
+--
+-- >>> 1.3 ^? radianLongitude
+-- Just (Longitude (DegreesLongitude 74) (Minutes 29) (Seconds 4.2481))
+--
+-- >>> (-1.3) ^? radianLongitude
+-- Just (Longitude (DegreesLongitude (-74)) (Minutes 29) (Seconds 4.2481))
+--
+-- >>> 3.14159 ^? radianLongitude
+-- Just (Longitude (DegreesLongitude 179) (Minutes 59) (Seconds 59.4527))
+--
+-- >>> 3.15 ^? radianLongitude
+-- Nothing
+--
+-- >>> (-3.15) ^? radianLongitude
+-- Nothing
+--
+-- >>> fmap (radianLongitude #) (do deg <- 7 ^? nDegreesLongitude; min <- 7 ^? nMinutes; sec <- 7 ^? nSeconds; (deg, min, sec) ^? dmsLongitude)
+-- Just 0.12424320205794079
+--
+-- >>> fmap (radianLongitude #) (do deg <- 179 ^? nDegreesLongitude; min <- 15 ^? nMinutes; sec <- 6 ^? nSeconds; (deg, min, sec) ^? dmsLongitude)
+-- Just 3.1285317730207023
+radianLongitude ::
+  Prism' Double Longitude
+radianLongitude =
+  iso (\n -> n * 180 / pi) (\n -> n * pi / 180) . fracLongitude
 
 class HasLongitude t where
   longitude ::
