solverforge_maps/routing/
geo.rs1use super::coord::Coord;
4
5pub fn coord_key(lat: f64, lng: f64) -> (i64, i64) {
6 ((lat * 1e7).round() as i64, (lng * 1e7).round() as i64)
7}
8
9pub fn haversine_distance(a: Coord, b: Coord) -> f64 {
10 const R: f64 = 6_371_000.0;
11
12 let lat1_rad = a.lat.to_radians();
13 let lat2_rad = b.lat.to_radians();
14 let dlat = (b.lat - a.lat).to_radians();
15 let dlng = (b.lng - a.lng).to_radians();
16
17 let h =
18 (dlat / 2.0).sin().powi(2) + lat1_rad.cos() * lat2_rad.cos() * (dlng / 2.0).sin().powi(2);
19 let c = 2.0 * h.sqrt().asin();
20
21 R * c
22}