import 'dart:math' as math; class LocationCalculations { /// Calculate distance between two points using Haversine formula /// Returns distance in kilometers static double calculateDistanceKm( double startLatitude, double startLongitude, double endLatitude, double endLongitude, ) { const double earthRadius = 6371; // Earth's radius in kilometers // Convert degrees to radians double startLatRad = _degreesToRadians(startLatitude); double startLonRad = _degreesToRadians(startLongitude); double endLatRad = _degreesToRadians(endLatitude); double endLonRad = _degreesToRadians(endLongitude); // Calculate differences double deltaLat = endLatRad - startLatRad; double deltaLon = endLonRad - startLonRad; // Haversine formula double a = math.sin(deltaLat / 2) * math.sin(deltaLat / 2) + math.cos(startLatRad) * math.cos(endLatRad) * math.sin(deltaLon / 2) * math.sin(deltaLon / 2); double c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a)); // Calculate distance double distance = earthRadius * c; return distance; } /// Calculate distance in meters static double calculateDistanceMeters( double startLatitude, double startLongitude, double endLatitude, double endLongitude, ) { return calculateDistanceKm( startLatitude, startLongitude, endLatitude, endLongitude, ) * 1000; // Convert km to meters } /// Convert degrees to radians static double _degreesToRadians(double degrees) { return degrees * (math.pi / 180); } /// Calculate estimated time based on distance (assuming average speed of 40 km/h in city) static double calculateEstimatedTimeMinutes(double distanceKm, {double avgSpeedKmh = 40.0}) { return (distanceKm / avgSpeedKmh) * 60; // Convert hours to minutes } }