Чтобы рассчитать расстояние между двумя местоположениями во Flutter, вы можете использовать пакет geolocator. Вот несколько методов, которые вы можете использовать, а также примеры кода:
Метод 1: использование формулы гаверсина
Формула гаверсина обычно используется для расчета расстояния между двумя точками на сфере (например, на Земле). Вот пример того, как вы можете использовать его во Flutter:
import 'package:geolocator/geolocator.dart';
import 'dart:math' show cos, sqrt, asin;
double calculateDistance(Position start, Position end) {
const double earthRadius = 6371; // in kilometers
double lat1 = start.latitude;
double lon1 = start.longitude;
double lat2 = end.latitude;
double lon2 = end.longitude;
double dLat = _toRadians(lat2 - lat1);
double dLon = _toRadians(lon2 - lon1);
double a = sin(dLat / 2) * sin(dLat / 2) +
cos(_toRadians(lat1)) * cos(_toRadians(lat2)) * sin(dLon / 2) * sin(dLon / 2);
double c = 2 * asin(sqrt(a));
double distance = earthRadius * c;
return distance;
}
double _toRadians(double degree) {
return degree * (pi / 180);
}
// Usage:
void main() {
Position start = Position(latitude: 37.7749, longitude: -122.4194);
Position end = Position(latitude: 34.0522, longitude: -118.2437);
double distance = calculateDistance(start, end);
print('Distance: $distance km');
}
Метод 2. Использование метода distanceBetween.
Метод distanceBetween, предоставляемый пакетом geolocator, позволяет вычислить расстояние между двумя наборы координат широты и долготы напрямую. Вот пример:
import 'package:geolocator/geolocator.dart';
// Usage:
void main() async {
Position start = Position(latitude: 37.7749, longitude: -122.4194);
Position end = Position(latitude: 34.0522, longitude: -118.2437);
double distance = await Geolocator.distanceBetween(
start.latitude, start.longitude, end.latitude, end.longitude);
print('Distance: $distance meters');
}