Constructor
new LatLonNvectorSpherical(lat, lon)
Creates a latitude/longitude point on the earth’s surface, using a spherical model earth.
Parameters:
Name | Type | Description |
---|---|---|
lat |
number | Latitude (in degrees). |
lon |
number | Longitude (in degrees). |
- Source:
Throws:
-
Invalid lat/lon.
- Type
- TypeError
Example
import LatLon from '/js/geodesy/latlon-nvector-spherical.js';
const p = new LatLon(52.205, 0.119);
Members
(static) metresToKm
Conversion factors; 1000 * LatLon.metresToKm gives 1.
- Source:
(static) metresToMiles
Conversion factors; 1000 * LatLon.metresToMiles gives 0.621371192237334.
- Source:
(static) metresToNauticalMiles
Conversion factors; 1000 * LatLon.metresToMiles gives 0.5399568034557236.
- Source:
lat
Latitude in degrees north from equator (including aliases lat, latitude): can be set as
numeric or hexagesimal (deg-min-sec); returned as numeric.
- Source:
lon
Longitude in degrees east from international reference meridian (including aliases lon, lng,
longitude): can be set as numeric or hexagesimal (deg-min-sec); returned as numeric.
- Source:
Methods
(static) areaOf(polygon, radiusopt) → {number}
Calculates the area of a spherical polygon where the sides of the polygon are great circle
arcs joining the vertices.
Uses Girard’s theorem: A = [Σθᵢ − (n−2)·π]·R²
Parameters:
Name | Type | Attributes | Default | Description |
---|---|---|---|---|
polygon |
Array.<LatLon> | Array of points defining vertices of the polygon. | ||
radius |
number |
<optional> |
6371e3 | (Mean) radius of earth (defaults to radius in metres). |
- Source:
Returns:
The area of the polygon in the same units as radius.
- Type
- number
Example
const polygon = [ new LatLon(0,0), new LatLon(1,0), new LatLon(0,1) ];
const area = LatLon.areaOf(polygon); // 6.18e9 m²
(static) centreOf(polygon) → {LatLon}
Calculates the centre of a spherical polygon where the sides of the polygon are great circle
arcs joining the vertices.
Based on a ‘non-obvious application of Stokes’ theorem’ giving C = Σ[a×b / |a×b| ⋅ θab/2] for
each pair of consecutive vertices a, b; stackoverflow.com/questions/19897187#answer-38201499.
Parameters:
Name | Type | Description |
---|---|---|
polygon |
Array.<LatLon> | Array of points defining vertices of the polygon. |
- Source:
Returns:
Centre point of the polygon.
- Type
- LatLon
Example
const polygon = [ new LatLon(0, 0), new LatLon(1, 0), new LatLon(1, 1), new LatLon(0, 1) ];
const centre = LatLon.centreOf(polygon); // 0.500°N, 0.500°E
(static) intersection(path1start, path1brngEnd, path2start, path2brngEnd) → {LatLon}
Returns the point of intersection of two paths each defined by point pairs or start point and bearing.
Parameters:
Name | Type | Description |
---|---|---|
path1start |
LatLon | Start point of first path. |
path1brngEnd |
LatLon | number | End point of first path or initial bearing from first start point. |
path2start |
LatLon | Start point of second path. |
path2brngEnd |
LatLon | number | End point of second path or initial bearing from second start point. |
- Source:
Throws:
-
Invalid parameter.
- Type
- TypeError
Returns:
Destination point (null if no unique intersection defined)
- Type
- LatLon
Example
const p1 = new LatLon(51.8853, 0.2545), brng1 = 108.55;
const p2 = new LatLon(49.0034, 2.5735), brng2 = 32.44;
const pInt = LatLon.intersection(p1, brng1, p2, brng2); // 50.9076°N, 004.5086°E
(static) meanOf(points) → {LatLon}
Returns point representing geographic mean of supplied points.
Parameters:
Name | Type | Description |
---|---|---|
points |
Array.<LatLon> | Array of points to be averaged. |
- Source:
Returns:
Point at the geographic mean of the supplied points.
- Type
- LatLon
Example
const p = LatLon.meanOf([ new LatLon(1, 1), new LatLon(4, 2), new LatLon(1, 3) ]); // 02.0001°N, 002.0000°E
(static) triangulate(point1, bearing1, point2, bearing2) → {LatLon}
Locates a point given two known locations and bearings from those locations.
Parameters:
Name | Type | Description |
---|---|---|
point1 |
LatLon | First reference point. |
bearing1 |
number | Bearing (in degrees from north) from first reference point. |
point2 |
LatLon | Second reference point. |
bearing2 |
number | Bearing (in degrees from north) from second reference point. |
- Source:
Returns:
Triangulated point.
- Type
- LatLon
Example
const p1 = new LatLon(50.7175,1.65139), p2 = new LatLon(50.9250,1.7094);
const p = LatLon.triangulate(p1, 333.3508, p2, 310.1414); // 51.1297°N, 001.3214°E
(static) trilaterate(point1, distance1, point2, distance2, point3, distance3, radiusopt) → {LatLon}
Locates a latitude/longitude point at given distances from three other points.
Parameters:
Name | Type | Attributes | Default | Description |
---|---|---|---|---|
point1 |
LatLon | First reference point. | ||
distance1 |
number | Distance to first reference point (same units as radius). | ||
point2 |
LatLon | Second reference point. | ||
distance2 |
number | Distance to second reference point (same units as radius). | ||
point3 |
LatLon | Third reference point. | ||
distance3 |
number | Distance to third reference point (same units as radius). | ||
radius |
number |
<optional> |
6371e3 | (Mean) radius of earth (defaults to radius in metres). |
- Source:
Returns:
Trilaterated point.
- Type
- LatLon
Example
LatLon.trilaterate(new LatLon(0, 0), 157e3, new LatLon(0, 1), 111e3, new LatLon(1, 0), 111e3); // 00.9985°N, 000.9986°E
alongTrackDistanceTo(pathStart, pathBrngEnd, radiusopt) → {number}
Returns how far ‘this’ point is along a path from from start-point, heading on bearing or towards
end-point. That is, if a perpendicular is drawn from ‘this’ point to the (great circle) path, the
along-track distance is the distance from the start point to where the perpendicular crosses the
path.
Parameters:
Name | Type | Attributes | Default | Description |
---|---|---|---|---|
pathStart |
LatLon | Start point of great circle path. | ||
pathBrngEnd |
LatLon | number | End point of great circle path or initial bearing from great circle start point. | ||
radius |
number |
<optional> |
6371e3 | (Mean) radius of earth (defaults to radius in metres). |
- Source:
Returns:
Distance along great circle to point nearest ‘this’ point.
- Type
- number
Example
const pCurrent = new LatLon(53.2611, -0.7972);
const p1 = new LatLon(53.3206, -1.7297);
const p2 = new LatLon(53.1887, 0.1334);
const d = pCurrent.alongTrackDistanceTo(p1, p2); // 62.331 km
crossTrackDistanceTo(pathStart, pathBrngEnd, radiusopt) → {number}
Returns (signed) distance from ‘this’ point to great circle defined by start-point and end-point/bearing.
Parameters:
Name | Type | Attributes | Default | Description |
---|---|---|---|---|
pathStart |
LatLon | Start point of great circle path. | ||
pathBrngEnd |
LatLon | number | End point of great circle path or initial bearing from great circle start point. | ||
radius |
number |
<optional> |
6371e3 | (Mean) radius of earth (defaults to radius in metres). |
- Source:
Throws:
-
Invalid parameter.
- Type
- TypeError
Returns:
Distance to great circle (-ve if to left, +ve if to right of path).
- Type
- number
Example
const pCurrent = new LatLon(53.2611, -0.7972);
const p1 = new LatLon(53.3206, -1.7297), brng = 96.0;
const d = pCurrent.crossTrackDistanceTo(p1, brng); // Number(d.toPrecision(4)): -305.7
const p1 = new LatLon(53.3206, -1.7297), p2 = new LatLon(53.1887, 0.1334);
const d = pCurrent.crossTrackDistanceTo(p1, p2); // Number(d.toPrecision(4)): -307.5
destinationPoint(distance, bearing, radiusopt) → {LatLon}
Returns the destination point from ‘this’ point having travelled the given distance on the
given initial bearing (bearing normally varies around path followed).
Parameters:
Name | Type | Attributes | Default | Description |
---|---|---|---|---|
distance |
number | Distance travelled, in same units as earth radius (default: metres). | ||
bearing |
number | Initial bearing in degrees from north. | ||
radius |
number |
<optional> |
6371e3 | (Mean) radius of earth (defaults to radius in metres). |
- Source:
Returns:
Destination point.
- Type
- LatLon
Example
const p1 = new LatLon(51.47788, -0.00147);
const p2 = p1.destinationPoint(7794, 300.7); // 51.5136°N, 000.0983°W
distanceTo(point, radiusopt) → {number}
Returns the distance on the surface of the sphere from ‘this’ point to destination point.
Parameters:
Name | Type | Attributes | Default | Description |
---|---|---|---|---|
point |
LatLon | Latitude/longitude of destination point. | ||
radius |
number |
<optional> |
6371e3 | Radius of earth (defaults to mean radius in metres). |
- Source:
Throws:
-
Invalid point/radius.
- Type
- TypeError
Returns:
Distance between this point and destination point, in same units as radius.
- Type
- number
Example
const p1 = new LatLon(52.205, 0.119);
const p2 = new LatLon(48.857, 2.351);
const d = p1.distanceTo(p2); // 404.3 km
equals(point) → {bool}
Checks if another point is equal to ‘this’ point.
Parameters:
Name | Type | Description |
---|---|---|
point |
LatLon | Point to be compared against this point. |
- Source:
Throws:
-
Invalid point.
- Type
- TypeError
Returns:
True if points have identical latitude and longitude values.
- Type
- bool
Example
const p1 = new LatLon(52.205, 0.119);
const p2 = new LatLon(52.205, 0.119);
const equal = p1.equals(p2); // true
finalBearingTo(point) → {number}
Returns final bearing arriving at destination point from ‘this’ point; the final bearing will
differ from the initial bearing by varying degrees according to distance and latitude.
Parameters:
Name | Type | Description |
---|---|---|
point |
LatLon | Latitude/longitude of destination point. |
- Source:
Throws:
-
Invalid point.
- Type
- TypeError
Returns:
Final bearing in degrees from north (0°..360°).
- Type
- number
Example
const p1 = new LatLon(52.205, 0.119);
const p2 = new LatLon(48.857, 2.351);
const b2 = p1.finalBearingTo(p2); // 157.9°
initialBearingTo(point) → {number}
Returns the initial bearing from ‘this’ point to destination point.
Parameters:
Name | Type | Description |
---|---|---|
point |
LatLon | Latitude/longitude of destination point. |
- Source:
Throws:
-
Invalid point.
- Type
- TypeError
Returns:
Initial bearing in degrees from north (0°..360°).
- Type
- number
Example
const p1 = new LatLon(52.205, 0.119);
const p2 = new LatLon(48.857, 2.351);
const b1 = p1.initialBearingTo(p2); // 156.2°
intermediatePointOnChordTo(point, fraction) → {LatLon}
Returns the latitude/longitude point projected from the point at given fraction on a straight
line between between ‘this’ point and given point.
Parameters:
Name | Type | Description |
---|---|---|
point |
LatLon | Latitude/longitude of destination point. |
fraction |
number | Fraction between the two points (0 = this point, 1 = specified point). |
- Source:
Throws:
-
Invalid point.
- Type
- TypeError
Returns:
Intermediate point between this point and destination point.
- Type
- LatLon
Example
const p1 = new LatLon(52.205, 0.119);
const p2 = new LatLon(48.857, 2.351);
const pInt = p1.intermediatePointTo(p2, 0.25); // 51.3723°N, 000.7072°E
intermediatePointTo(point, fraction) → {LatLon}
Returns the point at given fraction between ‘this’ point and given point.
Parameters:
Name | Type | Description |
---|---|---|
point |
LatLon | Latitude/longitude of destination point. |
fraction |
number | Fraction between the two points (0 = this point, 1 = specified point). |
- Source:
Throws:
-
Invalid point/fraction.
- Type
- TypeError
Returns:
Intermediate point between this point and destination point.
- Type
- LatLon
Example
const p1 = new LatLon(52.205, 0.119);
const p2 = new LatLon(48.857, 2.351);
const pInt = p1.intermediatePointTo(p2, 0.25); // 51.3721°N, 000.7072°E
isEnclosedBy(polygon) → {bool}
Tests whether ‘this’ point is enclosed by the polygon defined by a set of points.
Parameters:
Name | Type | Description |
---|---|---|
polygon |
Array.<LatLon> | Ordered array of points defining vertices of polygon. |
- Source:
Returns:
Whether this point is enclosed by polygon.
- Type
- bool
Example
const bounds = [ new LatLon(45,1), new LatLon(45,2), new LatLon(46,2), new LatLon(46,1) ];
const p = new LatLon(45.1, 1.1);
const inside = p.isEnclosedBy(bounds); // true
isWithinExtent(point1, point2) → {boolean}
Returns whether this point is within the extent of a line segment joining point 1 & point 2.
If this point is not on the great circle defined by point1 & point 2, returns whether it is
within the area bound by perpendiculars to the great circle at each point (in the same
hemisphere).
Parameters:
Name | Type | Description |
---|---|---|
point1 |
LatLon | First point defining segment. |
point2 |
LatLon | Second point defining segment. |
- Source:
Returns:
Whether this point is within extent of segment.
- Type
- boolean
Example
const p1 = new LatLon(51, 1), p2 = new LatLon(52, 2);
const within1 = new LatLon(52, 1).isWithinExtent(p1, p2); // true
const within2 = new LatLon(51, 0).isWithinExtent(p1, p2); // false
midpointTo(point) → {LatLon}
Returns the midpoint between ‘this’ point and destination point.
Parameters:
Name | Type | Description |
---|---|---|
point |
LatLon | Latitude/longitude of destination point. |
- Source:
Throws:
-
Invalid point.
- Type
- TypeError
Returns:
Midpoint between this point and destination point.
- Type
- LatLon
Example
const p1 = new LatLon(52.205, 0.119);
const p2 = new LatLon(48.857, 2.351);
const pMid = p1.midpointTo(p2); // 50.5363°N, 001.2746°E
nearestPointOnSegment(point1, point2) → {LatLon}
Returns closest point on great circle segment between point1 & point2 to ‘this’ point.
If this point is ‘within’ the extent of the segment, the point is on the segment between point1 &
point2; otherwise, it is the closer of the endpoints defining the segment.
Parameters:
Name | Type | Description |
---|---|---|
point1 |
LatLon | Start point of great circle segment. |
point2 |
LatLon | End point of great circle segment. |
- Source:
Returns:
Closest point on segment.
- Type
- LatLon
Example
const p1 = new LatLon(51.0, 1.0);
const p2 = new LatLon(51.0, 2.0);
const p0 = new LatLon(51.0, 1.9);
const p = p0.nearestPointOnSegment(p1, p2); // 51.0004°N, 001.9000°E
const d = p.distanceTo(p); // 42.71 m
const p0 = new LatLon(51.0, 2.1);
const p = p0.nearestPointOnSegment(p1, p2); // 51.0000°N, 002.0000°E
toGeoJSON() → {Object}
Converts ‘this’ point to a GeoJSON object.
- Source:
Returns:
this point as a GeoJSON ‘Point’ object.
- Type
- Object
toNvector() → {Nvector}
Converts ‘this’ latitude/longitude point to an n-vector (normal to earth's surface).
- Source:
Returns:
Normalised n-vector representing lat/lon point.
- Type
- Nvector
Example
const p = new LatLon(45, 45);
const v = p.toNvector(); // [0.5000,0.5000,0.7071]
toString(formatopt, dpopt) → {string}
Returns a string representation of ‘this’ point, formatted as degrees, degrees+minutes, or
degrees+minutes+seconds.
Parameters:
Name | Type | Attributes | Default | Description |
---|---|---|---|---|
format |
string |
<optional> |
d | Format point as 'd', 'dm', 'dms', or 'n' for signed numeric. |
dp |
number |
<optional> |
4|2|0 | Number of decimal places to use: default 4 for d, 2 for dm, 0 for dms. |
- Source:
Returns:
Comma-separated formatted latitude/longitude.
- Type
- string
Example
const greenwich = new LatLon(51.47788, -0.00147);
const d = greenwich.toString(); // 51.4778°N, 000.0015°W
const dms = greenwich.toString('dms', 2); // 51°28′40.37″N, 000°00′05.29″W
const [lat, lon] = greenwich.toString('n').split(','); // 51.4778, -0.0015