CTK 1.1.0
This commit is contained in:
20
lib/consultorios/geo_utils.dart
Normal file
20
lib/consultorios/geo_utils.dart
Normal file
@@ -0,0 +1,20 @@
|
||||
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;
|
||||
Reference in New Issue
Block a user