distanceTo method

double distanceTo(
  1. LocationData other, {
  2. DistanceUnit unit = DistanceUnit.kilometers,
})

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;
  }
}