mt-latlon

Latitude/longitude spherical geodesy formulae and scripts.

mt-latlon

Latitude/longitude spherical geodesy formulae and scripts.

$ npm install mt-latlon

The module exposes the LatLon class which represents a point on the earth's surface. With this class you can create LatLon objects on which you can perform various operations.

var LatLon = require('mt-latlon');
var point = new LatLon(51.5136, -0.0983);

The available operations of the LatLon objects is listed below.

Creates a point on the earth's surface at the supplied latitude/longitude.

  • lat (number) latitude in numeric degrees
  • lon (number) longitude in numeric degrees
  • rad (number, default = 6371) radius of earth if different value is required from standard 6,371km
var point = new LatLon(51.5136, -0.0983);

Returns the distance from this point to the supplied point, in km (using Haversine formula). Source: Haversine formula - R. W. Sinnott, "Virtues of the Haversine", Sky and Telescope, vol 68, no 2, 1984.

  • point (LatLon) Latitude/longitude of destination point
  • precision (number, default = 4) Number of significant digits to use for returned value
var p1 = new LatLon(51.5136, -0.0983);
var p2 = new LatLon(51.4778, -0.0015);
var dist = p1.distanceTo(p2);
// => 7.794

Returns the (initial) bearing from this point to the supplied point, in degrees. (see http://williams.best.vwh.net/avform.htm#Crs)

  • point (LatLon) Latitude/longitude of destination point
var p1 = new LatLon(51.5136, -0.0983);
var p2 = new LatLon(51.4778, -0.0015);
var brng = p1.bearingTo(p2);
// => 120.67420693455165

Returns final bearing arriving at supplied destination point from this point; the final bearing will differ from the initial bearing by varying degrees according to distance and latitude.

  • point (LatLon) Latitude/longitude of destination point
var p1 = new LatLon(51.5136, -0.0983);
var p2 = new LatLon(51.4778, -0.0015);
var brng = p1.finalBearingTo(p2);
// => 120.74995889218458

Returns the midpoint between this point and the supplied point. (see http://mathforum.org/library/drmath/view/51822.html for derivation)

  • point (LatLon) Latitude/longitude of destination point
var p1 = new LatLon(51.5136, -0.0983);
var p2 = new LatLon(51.4778, -0.0015);
var p3 = p1.midpointTo(p2);
// p3 = 51°29′45″N, 000°03′00″W (as LatLon object)

Returns the destination point from this point having travelled the given distance (in km) on the given initial bearing (bearing may vary before destination is reached). (see http://williams.best.vwh.net/avform.htm#LL)

  • brng (number) Initial bearing in degrees
  • dist (number) Distance in km
var p1 = new LatLon(51.5136, -0.0983);
var p2 = p1.destinationPoint(120, 10);
// p2 = 51°28′07″N, 000°01′36″E (as LatLon object)

Returns the point of intersection of two paths defined by point and bearing. null is returned if no unique intersection is defined. (see http://williams.best.vwh.net/avform.htm#Intersection)

  • p1 (LatLon) First point
  • brng1 (number) Initial bearing from first point
  • p2 (LatLon) Second point
  • brng2 (number) Initial bearing from second point
var p1 = new LatLon(51.5136, -0.0983);
var p2 = new LatLon(51.4778, -0.0015);
var p3 = LatLon.intersection(p1, 120, p2, 10);
// p3 = 51°28′43″N, 000°00′05″W

Returns the distance from this point to the supplied point, in km, travelling along a rhumb line. (see http://williams.best.vwh.net/avform.htm#Rhumb)

  • point (LatLon) Latitude/longitude of destination point
var p1 = new LatLon(51.5136, -0.0983);
var p2 = new LatLon(51.4778, -0.0015);
var dist = p1.rhumbDistanceTo(p2);
// => 7.794

Returns the bearing from this point to the supplied point along a rhumb line, in degrees from North.

  • point (LatLon) Latitude/longitude of destination point
var p1 = new LatLon(51.5136, -0.0983);
var p2 = new LatLon(51.4778, -0.0015);
var dist = p1.rhumbBearingTo(p2);
// => 120.71209100924256

Returns the destination point from this point having travelled the given distance (in km) on the given bearing along a rhumb line.

  • brng (number) Bearing in degrees from North
  • dist (number) Distance in km
var p1 = new LatLon(51.5136, -0.0983);
var p2 = p1.rhumbDestinationPoint(120, 10);
// p2 = 51°28′07″N, 000°01′36″E (as LatLon object)

Returns the loxodromic midpoint (along a rhumb line) between this point and the supplied point. (see http://mathforum.org/kb/message.jspa?messageID=148837)

  • point (LatLon) Latitude/longitude of destination point
var p1 = new LatLon(51.5136, -0.0983);
var p2 = new LatLon(51.4778, -0.0015);
var p3 = p1.rhumbMidpointTo(p2);
// p3 = 51°29′45″N, 000°03′00″W (as LatLon object)

Returns the latitude of this point; signed numeric degrees if no format, otherwise format and dp as per Geo.toLat().

  • format (string, optional) Return value as d, dm, dms
  • dp (number, optional, 0|2|4) Number of decimal places to display
var p1 = new LatLon(51.5136, -0.0983);
var lat = p1.lat();
// => 51.5136
lat = p1.lat('d');
// => 51.5136°N
lat = p1.lat('dm');
// => 51°30.82′N
lat = p1.lat('dms');
// => 51°30′49″N
lat = p1.lat('d', 2);
// => 51.51°N

Returns the longitude of this point; signed numeric degrees if no format, otherwise format and dp as per Geo.toLon().

  • format (string, optional) Return value as d, dm, dms
  • dp (number, 0|2|4) Number of decimal places to display
var p1 = new LatLon(51.5136, -0.0983);
var lon = p1.lon();
// => -0.0983
lon = p1.lon('d');
// => 000.0983°W
lon = p1.lon('dm');
// => 000°05.90′W
lon = p1.lon('dms');
// => 000°05′54″W
lon = p1.lon('d', 2);
// => 000.10°W

The original code was written by Chris Veness and can be found at http://www.movable-type.co.uk/scripts/latlong.html. It is released under the simple Creative Commons attribution license (http://creativecommons.org/licenses/by/3.0/).

This project is released under the MIT license.