From 2d835af3acd946f9ac4437670f2e0b348f8dc542 Mon Sep 17 00:00:00 2001 From: Zynh0722 Date: Tue, 23 Apr 2024 00:11:21 -0700 Subject: [PATCH] haversine implementation --- src/distance.rs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/distance.rs diff --git a/src/distance.rs b/src/distance.rs new file mode 100644 index 0000000..17eeefe --- /dev/null +++ b/src/distance.rs @@ -0,0 +1,17 @@ +const EARTH_RAD_METERS: f64 = 6371e3; + +type LatLon = (f64, f64); + +pub fn haversine(a: LatLon, b: LatLon) -> f64 { + let a_latitude = a.0.to_radians(); + let b_latitude = b.0.to_radians(); + + let delta_latitude = (b.0 - a.0).to_radians(); + let delta_longitude = (b.1 - a.1).to_radians(); + + let central_angle_inner = (delta_latitude / 2.0).sin().powi(2) + + a_latitude.cos() * b_latitude.cos() * (delta_longitude / 2.0).sin().powi(2); + let central_angle = 2.0 * central_angle_inner.sqrt().asin(); + + EARTH_RAD_METERS * central_angle +}