distanceTo method
Implementation
double distanceTo(LocationData other,
{DistanceUnit unit = DistanceUnit.kilometers}) {
// Haversine formula implementation
const double earthRadius = 6371; // km
double lat1Rad = latitude * (3.14159265359 / 180);
double lat2Rad = other.latitude * (3.14159265359 / 180);
double deltaLatRad = (other.latitude - latitude) * (3.14159265359 / 180);
double deltaLngRad = (other.longitude - longitude) * (3.14159265359 / 180);
double a = (deltaLatRad / 2).abs() * (deltaLatRad / 2).abs() +
cos(lat1Rad) *
cos(lat2Rad) *
(deltaLngRad / 2).abs() *
(deltaLngRad / 2).abs();
double c = 2 * asin(sqrt(a));
double distance = earthRadius * c;
switch (unit) {
case DistanceUnit.meters:
return distance * 1000;
case DistanceUnit.miles:
return distance * 0.621371;
case DistanceUnit.feet:
return distance * 3280.84;
case DistanceUnit.kilometers:
default:
return distance;
}
}