jord: Geographical Position Calculations

[ bsd3, geography, library, program ] [ Propose Tags ]

Please see the README on GitHub at

[Skip to Readme]
Versions [faq],,,,,,,,
Change log
Dependencies base (>=4.9 && <5), haskeline (==0.7.*), jord [details]
License BSD-3-Clause
Copyright 2018 Cedric Liegeois
Author Cedric Liegeois
Maintainer Cedric Liegeois <>
Category Geography
Home page
Bug tracker
Source repo head: git clone
Uploaded by CedricLiegeois at Sun Aug 12 04:25:03 UTC 2018
Distributions NixOS:
Executables jord-exe
Downloads 1761 total (83 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs uploaded by user
Build status unknown [no reports yet]




Maintainer's Corner

For package maintainers and hackage trustees

Readme for jord-

[back to package description]

Jord - Geographical Position Calculations

travis build status Hackage license

Jord [Swedish] is Earth [English]

What is this?

Jord is a Haskell library that implements various geographical position calculations using the algorithms described in Gade, K. (2010). A Non-singular Horizontal Position Representation.

  • Transformation between ECEF (earth-centred, earth-fixed), Latitude/Longitude and N-Vector positions for spherical and ellipsoidal earth model
  • Transformation between Latitude/Longitude and N-Vector positions
  • Local, Body and North, East, Down Frames: delta between positions, target position from reference position and delta
  • surface distance, initial & final bearing, interpolated position, great circle intersections, cross track distance, ...

How do I build it?

If you have Stack, then:

$ stack build --test

How do I use it?

See documentation on Hackage

import Data.Geo.Jord

-- Delta between positions in frameL
let p1 = decimalLatLongHeight 1 2 (metres (-3))
let p2 = decimalLatLongHeight 4 5 (metres (-6))
let w = decimalDegrees 5 -- wander azimuth
deltaBetween p1 p2 (frameL w) wgs84 -- = deltaMetres 359490.579 302818.523 17404.272

-- destination position from 531914N0014347W having travelled 500Nm on a heading of 96.0217°
-- using mean earth radius derived from the WG84 ellipsoid
destination (readLatLong "531914N0014347W") (decimalDegrees 96.0217) (nauticalMiles 500) r84

-- surface distance between 54°N,154°E and its antipodal position
-- using mean earth radius derived from the WG84 ellipsoid
let p = decimalLatLong 54 154
surfaceDistance p (antipode p) r84

Jord comes with a REPL (built with haskeline):

$ jord-exe
jord> finalBearing (destination (antipode 54°N,154°E) 54° 1000m) 54°N,154°E
jord> angle: 126°0'0.0" (126.0)