|
@@ -0,0 +1,25 @@
|
|
|
+import { Angle } from './angle';
|
|
|
+
|
|
|
+export class WGS84 {
|
|
|
+ /// @brief Calculates the Haversine distance
|
|
|
+ /// @param coordinate0 The first coordinate
|
|
|
+ /// @param coordinate1 The second coordinate
|
|
|
+ /// @return The haversine distance in metres
|
|
|
+ static distance(
|
|
|
+ coordinate0: { lat: number; lon: number },
|
|
|
+ coordinate1: { lat: number; lon: number },
|
|
|
+ ): number {
|
|
|
+ const lat0 = Angle.deg2rad(coordinate0.lat);
|
|
|
+ const lon0 = Angle.deg2rad(coordinate0.lon);
|
|
|
+ const lat1 = Angle.deg2rad(coordinate1.lat);
|
|
|
+ const lon1 = Angle.deg2rad(coordinate1.lon);
|
|
|
+ const earthRadius = 6371000;
|
|
|
+
|
|
|
+ const a =
|
|
|
+ 0.5 -
|
|
|
+ Math.cos(lat1 - lat0) * 0.5 +
|
|
|
+ Math.cos(lat0) * Math.cos(lat1) * (1 - Math.cos(lon1 - lon0) * 0.5);
|
|
|
+
|
|
|
+ return 2 * earthRadius * Math.asin(Math.sqrt(a));
|
|
|
+ }
|
|
|
+}
|