@ulrik.ek/wgs84 1.0.1 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -4
- package/dist/index.js +15 -17
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
A tiny library fully implemented in Typescript to handle WGS84 coordinates in GeoJson and "small" distances between them with very high accuracy (~1 cm), based on a local, flat earth approximation.
|
|
6
6
|
|
|
7
|
+
- All functions uses degrees for latitude and longitude, and meters for distances.
|
|
7
8
|
- Parses and gives output in GeoJson using the [Point definition](https://en.wikipedia.org/wiki/GeoJSON). If you already have imported the typescript definition for Point in the geojson package you can use that (that is what I do in unit testing). Otherwise you can import `Point` from this package.
|
|
8
9
|
- No dependencies to other NPM modules.
|
|
9
10
|
- The math is based on [Aviation Formulary V1.47 by Ed Williams](https://edwilliams.org/avform147.htm#flat).
|
|
@@ -18,7 +19,7 @@ Include in your project as any other NPM package
|
|
|
18
19
|
## Usage
|
|
19
20
|
|
|
20
21
|
```typescript
|
|
21
|
-
import * as wgs84 from '@ulrik.ek/wgs84';
|
|
22
|
+
import * as wgs84 from '@ulrik.ek/wgs84'; // The functions can obviously also be imported separately
|
|
22
23
|
|
|
23
24
|
// helper function to construct a GeoJSON Point
|
|
24
25
|
const lat = 15;
|
|
@@ -38,13 +39,29 @@ console.log(`distance along east=${wgs84.distanceEast(p, p1)}`);
|
|
|
38
39
|
|
|
39
40
|
This will produce the following output
|
|
40
41
|
|
|
41
|
-
> lat=15.000903761214213, lon=25.001859599546577
|
|
42
|
-
> distance along north=99.99999999991357
|
|
42
|
+
> lat=15.000903761214213, lon=25.001859599546577
|
|
43
|
+
> distance along north=99.99999999991357
|
|
43
44
|
> distance along east=200.00084005143466
|
|
44
45
|
|
|
45
46
|
## Documention
|
|
46
47
|
|
|
47
|
-
|
|
48
|
+
The following functions are available:
|
|
49
|
+
|
|
50
|
+
```Typescript
|
|
51
|
+
point(lat: number, lon: number, height?: number): Point;
|
|
52
|
+
R1(position: Point): number;
|
|
53
|
+
R2(position: Point): number;
|
|
54
|
+
distanceNorth(origin: Point, target: Point): number;
|
|
55
|
+
distanceEast(origin: Point, target: Point): number;
|
|
56
|
+
distanceUp(origin: Point, target: Point): number;
|
|
57
|
+
distance(origin: Point, target: Point): number;
|
|
58
|
+
bearing(origin: Point, target: Point): number;
|
|
59
|
+
pointNorthOf(origin: Point, dN: number): Point;
|
|
60
|
+
pointEastOf(origin: Point, dE: number): Point;
|
|
61
|
+
pointAbove(origin: Point, dH: number): Point;
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
[Full Typedoc documentation](https://github.com/UEk/wgs84/blob/main/doc/modules.md)
|
|
48
65
|
|
|
49
66
|
# Build and Test
|
|
50
67
|
|
package/dist/index.js
CHANGED
|
@@ -27,28 +27,25 @@ exports.R2 = R2;
|
|
|
27
27
|
function distanceNorth(origin, target) {
|
|
28
28
|
validCoord(origin);
|
|
29
29
|
validCoord(target);
|
|
30
|
-
const
|
|
31
|
-
const
|
|
32
|
-
return R1(origin) * (
|
|
30
|
+
const originLat = degToRad(origin.coordinates[1]);
|
|
31
|
+
const targetLat = degToRad(target.coordinates[1]);
|
|
32
|
+
return R1(origin) * (targetLat - originLat);
|
|
33
33
|
}
|
|
34
34
|
exports.distanceNorth = distanceNorth;
|
|
35
35
|
function distanceEast(origin, target) {
|
|
36
36
|
validCoord(origin);
|
|
37
37
|
validCoord(target);
|
|
38
|
-
const
|
|
39
|
-
const
|
|
40
|
-
const
|
|
41
|
-
let deltaAngle;
|
|
42
|
-
if (
|
|
43
|
-
deltaAngle
|
|
38
|
+
const originLat = degToRad(origin.coordinates[1]);
|
|
39
|
+
const originLon = degToRad(origin.coordinates[0]);
|
|
40
|
+
const targetLon = degToRad(target.coordinates[0]);
|
|
41
|
+
let deltaAngle = targetLon - originLon;
|
|
42
|
+
if (deltaAngle > Math.PI) {
|
|
43
|
+
deltaAngle -= 2 * Math.PI;
|
|
44
44
|
}
|
|
45
|
-
else if (
|
|
46
|
-
deltaAngle
|
|
45
|
+
else if (targetLon - originLon < -Math.PI) {
|
|
46
|
+
deltaAngle += 2 * Math.PI;
|
|
47
47
|
}
|
|
48
|
-
|
|
49
|
-
deltaAngle = yLon - xLon;
|
|
50
|
-
}
|
|
51
|
-
return R2(origin) * Math.cos(xLat) * deltaAngle;
|
|
48
|
+
return R2(origin) * Math.cos(originLat) * deltaAngle;
|
|
52
49
|
}
|
|
53
50
|
exports.distanceEast = distanceEast;
|
|
54
51
|
function distanceUp(origin, target) {
|
|
@@ -131,14 +128,15 @@ function radToDeg(rad) {
|
|
|
131
128
|
return (rad * 180) / Math.PI;
|
|
132
129
|
}
|
|
133
130
|
function validCoord(p) {
|
|
134
|
-
if (
|
|
131
|
+
if ((p.coordinates.length === 2 || p.coordinates.length === 3) &&
|
|
132
|
+
-90 <= p.coordinates[1] &&
|
|
135
133
|
p.coordinates[1] < 90 &&
|
|
136
134
|
-180 <= p.coordinates[0] &&
|
|
137
135
|
p.coordinates[0] <= 180) {
|
|
138
136
|
return true;
|
|
139
137
|
}
|
|
140
138
|
else {
|
|
141
|
-
throw new Error(`
|
|
139
|
+
throw new Error(`Invalid GeoJson or lat/lon out of range`);
|
|
142
140
|
}
|
|
143
141
|
}
|
|
144
142
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAiBA,SAAgB,KAAK,CAAC,GAAW,EAAE,GAAW,EAAE,MAAe;IAC3D,MAAM,MAAM,GAAU,MAAM;QACxB,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE;QACpD,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IACjD,UAAU,CAAC,MAAM,CAAC,CAAC;IACnB,OAAO,MAAM,CAAC;AAClB,CAAC;AAND,sBAMC;AAGD,MAAM,CAAC,GAAW,QAAQ,GAAG,IAAI,CAAC;AAElC,MAAM,CAAC,GAAW,CAAC,GAAG,aAAe,CAAC;AAEtC,MAAM,QAAQ,GAAW,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAQrC,SAAgB,EAAE,CAAC,QAAe;IAC9B,UAAU,CAAC,QAAQ,CAAC,CAAC;IACrB,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7F,CAAC;AAJD,gBAIC;AAQD,SAAgB,EAAE,CAAC,QAAe;IAC9B,UAAU,CAAC,QAAQ,CAAC,CAAC;IACrB,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACpE,CAAC;AAJD,gBAIC;AASD,SAAgB,aAAa,CAAC,MAAa,EAAE,MAAa;IACtD,UAAU,CAAC,MAAM,CAAC,CAAC;IACnB,UAAU,CAAC,MAAM,CAAC,CAAC;IACnB,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ulrik.ek/wgs84",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "Basic library for computing small distances between WGS84 coordinates using a flat earth approximation.",
|
|
5
5
|
"author": "Ulrik E.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -57,5 +57,5 @@
|
|
|
57
57
|
"url": "https://github.com/UEk/wgs84/issues"
|
|
58
58
|
},
|
|
59
59
|
"homepage": "https://github.com/UEk/wgs84#readme",
|
|
60
|
-
"keywords": ["wgs84", "geojson"]
|
|
60
|
+
"keywords": ["wgs84", "geojson", "latitude", "longitude"]
|
|
61
61
|
}
|