A library to calculate great circle distance, bearing, and destination between geographic coordinates.

Downloads in past


7700.2.87 years ago8 years agoMinified + gzip package size for great-circle in KB


A set of three functions, useful in geographical calculations of different sorts. Available for PHP, Python, Javascript and Ruby.
Live demo of the JavaScript implementation.

Usage with node.js

Install npm module great-circle
npm install great-circle
Usage in node.js or with browserify
var GreatCircle = require('great-circle')


Takes two sets of geographic coordinates in decimal degrees and produces distance along the great circle line. Output in kilometers by default.
// Distance from London to Paris
echo GreatCircle::distance(51.507222, -0.1275, 48.8567, 2.3508);
// Output: 343.46748684413
print( GreatCircle.distance(51.507222, -0.1275, 48.8567, 2.3508) )
document.write ( GreatCircle.distance(51.507222, -0.1275, 48.8567, 2.3508) );
puts GreatCircle.distance(51.507222, -0.1275, 48.8567, 2.3508)
Optional fifth argument allows to specify desired units:
  • M - meters
  • KM - kilometers
  • MI - miles
  • NM - nautical miles
  • YD - yards
  • FT - feet

// Distance from JFK airport to La Guardia airport in feet
echo GreatCircle::distance(40.63980103, -73.77890015, 40.77719879, -73.87259674, "FT");
// Output: 56425.612628758
The optional argument can also be passed in form of planet radius in any unit, to produce output in this unit.
// Distance between North and South poles on Mars (3389.5 is mean radius of Mars in kilometers)
echo GreatCircle::distance(90, 0, -90, 0, 3389.5);
// Output: 10648.428299343
// Distance between Moscow and New York in furlongs (31670.092 is Earth radius in furlongs)
echo GreatCircle::distance(55.75, 37.616667, 40.7127, -74.0059, 31670.092);
// Output: 37335.295755141


Takes two sets of geographic coordinates in decimal degrees and produces bearing (azimuth) from the first set of coordinates to the second set.
// Bearing from Paris to London in decimal degrees
echo GreatCircle::bearing(48.8567, 2.3508, 51.507222, -0.1275);
// Output: 330.03509575101


Takes one set of geographic coordinates in decimal degrees, azimuth and distance to produce a new set of coordinates, specified distance and bearing away from original.
// Coordinates of a location 100 KM away from Paris, traveling in the direction of London
$dest = GreatCircle::destination(48.8567, 2.3508, 330.035, 100);
printf("Latitude: %f, Longitude: %f", $dest["LAT"], $dest["LON"]);
// Output: Latitude: 49.633753, Longitude: 1.657274
Just like Distance, Destination assumes entered distance is in kilometers, but takes an optional argument to specify desired unit.
// Coordinates of a location 500 nautical miles away from Paris, traveling in the direction of New York
$brg = GreatCircle::bearing(48.8567, 2.3508, 40.7127, -74.0059);
$dest = GreatCircle::destination(48.8567, 2.3508, $brg, 500, "NM");
printf("Latitude: %f, Longitude: %f", $dest["LAT"], $dest["LON"]);
// Output: Latitude: 51.306719, Longitude: -10.071875