Files
CheckTheethKids/lib/consultorios/geo_utils.dart
Carlos Correia 89b27e5e86 CTK 1.1.0
2026-07-22 01:34:26 +01:00

21 lines
712 B
Dart

import 'dart:math';
const double _earthRadiusKm = 6371;
/// Distância em linha reta (km) entre duas coordenadas, pela fórmula de
/// Haversine — suficiente para ordenar/agrupar consultórios por
/// proximidade, sem precisar de nenhum pacote de mapas.
double haversineDistanceKm(double lat1, double lon1, double lat2, double lon2) {
final dLat = _toRadians(lat2 - lat1);
final dLon = _toRadians(lon2 - lon1);
final a = sin(dLat / 2) * sin(dLat / 2) +
cos(_toRadians(lat1)) *
cos(_toRadians(lat2)) *
sin(dLon / 2) *
sin(dLon / 2);
final c = 2 * atan2(sqrt(a), sqrt(1 - a));
return _earthRadiusKm * c;
}
double _toRadians(double degrees) => degrees * pi / 180;