import Toybox.Lang; import Toybox.Math; // Great-circle distance between two WGS84 coordinates, in meters. module Haversine { const EARTH_RADIUS_M = 6371000.0; function distance(lat1 as Float, lon1 as Float, lat2 as Float, lon2 as Float) as Float { var dLat = _toRad(lat2 - lat1); var dLon = _toRad(lon2 - lon1); var rLat1 = _toRad(lat1); var rLat2 = _toRad(lat2); var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(rLat1) * Math.cos(rLat2) * Math.sin(dLon / 2) * Math.sin(dLon / 2); var c = 2 * Math.asin(Math.sqrt(a)); return (EARTH_RADIUS_M * c).toFloat(); } function _toRad(deg as Float) as Float { return (deg * Math.PI / 180.0).toFloat(); } }