## Geodesic routines from GeographicLib This documentation applies to version 1.50. The documentation for other versions is available at https://geographiclib.sourceforge.io/m.nn/js for versions numbers m.nn ≥ 1.45. Licensed under the MIT/X11 License; see [LICENSE.txt](https://geographiclib.sourceforge.io/html/LICENSE.txt). ### Installation This library is a JavaScript implementation of the geodesic routines from [GeographicLib](https://geographiclib.sourceforge.io). This solves the direct and inverse geodesic problems for an ellipsoid of revolution. The library can be used in [node](https://nodejs.org) by first installing the [geographiclib node package](https://www.npmjs.com/package/geographiclib) with [npm](https://www.npmjs.com) ```bash $ npm install geographiclib $ node > var GeographicLib = require("geographiclib"); ``` The npm package includes a test suite. Run this by ```bash $ cd node_modules/geographiclib $ npm test ``` Alternatively, you can use it in client-side JavaScript, by including in your HTML page ```html ``` Both of these prescriptions define a {@link GeographicLib} namespace. ### Examples Now geodesic calculations can be carried out, for example, ```javascript var geod = GeographicLib.Geodesic.WGS84, r; // Find the distance from Wellington, NZ (41.32S, 174.81E) to // Salamanca, Spain (40.96N, 5.50W)... r = geod.Inverse(-41.32, 174.81, 40.96, -5.50); console.log("The distance is " + r.s12.toFixed(3) + " m."); // This prints "The distance is 19959679.267 m." // Find the point 20000 km SW of Perth, Australia (32.06S, 115.74E)... r = geod.Direct(-32.06, 115.74, 225, 20000e3); console.log("The position is (" + r.lat2.toFixed(8) + ", " + r.lon2.toFixed(8) + ")."); // This prints "The position is (32.11195529, -63.95925278)." ``` Two examples of this library in use are * [A geodesic calculator](https://geographiclib.sourceforge.io/scripts/geod-calc.html) * [Displaying geodesics on Google Maps](https://geographiclib.sourceforge.io/scripts/geod-google.html) ### More information * {@tutorial 1-geodesics} * {@tutorial 2-interface} * {@tutorial 3-examples} ### Implementations in various languages * {@link https://sourceforge.net/p/geographiclib/code/ci/release/tree/ git repository} * C++ (complete library): {@link https://geographiclib.sourceforge.io/html/index.html documentation}, {@link https://sourceforge.net/projects/geographiclib/files/distrib download}; * C (geodesic routines): {@link https://geographiclib.sourceforge.io/html/C/index.html documentation}, also included with recent versions of {@link https://github.com/OSGeo/proj.4/wiki proj.4}; * Fortran (geodesic routines): {@link https://geographiclib.sourceforge.io/html/Fortran/index.html documentation}; * Java (geodesic routines): {@link http://repo1.maven.org/maven2/net/sf/geographiclib/GeographicLib-Java/ Maven Central package}, {@link https://geographiclib.sourceforge.io/html/java/index.html documentation}; * JavaScript (geodesic routines): {@link https://www.npmjs.com/package/geographiclib npm package}, {@link https://geographiclib.sourceforge.io/html/js/index.html documentation}; * Python (geodesic routines): {@link http://pypi.python.org/pypi/geographiclib PyPI package}, {@link https://geographiclib.sourceforge.io/html/python/index.html documentation}; * Matlab/Octave (geodesic and some other routines): {@link https://www.mathworks.com/matlabcentral/fileexchange/50605 Matlab Central package}, {@link https://viewer.mathworks.com/?viewer=plain_code&url=https%3A%2F%2Fwww.mathworks.com%2Fmatlabcentral%2Fmlc-downloads%2Fdownloads%2Fsubmissions%2F50605%2Fversions%2F15%2Fcontents%2FContents.m documentation}; * C# (.NET wrapper for complete C++ library): {@link https://geographiclib.sourceforge.io/html/NET/index.html documentation}. ### Change log * Version 1.50 (released 2019-09-24) * PolygonArea can now handle arbitrarily complex polygons. In the case of self-intersecting polygons the area is accumulated "algebraically", e.g., the areas of the 2 loops in a figure-8 polygon will partially cancel. * Fix two bugs in the computation of areas when some vertices are specified by an added edge. * Fix bug in computing unsigned area. * When parsing DMS strings ignore various non-breaking spaces. * Fall back to system versions of hypot, cbrt, log1p, atanh if they are available. * Math.cbrt, Math.atanh, and Math.asinh preserve the sign of −0. * Version 1.49 (released 2017-10-05) * Use explicit test for nonzero real numbers. * Version 1.48 (released 2017-04-09) * Change default range for longitude and azimuth to (−180°, 180°] (instead of [−180°, 180°)). * Version 1.47 (released 2017-02-15) * Improve accuracy of area calculation (fixing a flaw introduced in version 1.46). * Version 1.46 (released 2016-02-15) * Fix bugs in PolygonArea.TestEdge (problem found by threepointone). * Add Geodesic.DirectLine, Geodesic.ArcDirectLine, Geodesic.GenDirectLine, Geodesic.InverseLine, GeodesicLine.SetDistance, GeodesicLine.SetArc, GeodesicLine.GenSetDistance, GeodesicLine.s13, GeodesicLine.a13. * More accurate inverse solution when longitude difference is close to 180°. ### Authors * algorithms + js code: Charles Karney (charles@karney.com) * node.js port: Yurij Mikhalevich (0@39.yt)