Я пытаюсь вычислить расстояние между двумя точками, используя эту формулу
double calculateDistance(lat1, lon1, lat2, lon2){
var p = 0.017453292519943295;
var c = cos;
var a = 0.5 - c((lat2 - lat1) * p) / 2 +
c(lat1 * p) * c(lat2 * p) *
(1 - c((lon2 - lon1) * p)) / 2;
return 12742 * asin(sqrt(a));
}
значение широта и lon1 от геолокация: используя getCurrentPosition , в то время как
значение lat2 и lon2 из класса массива , которое я сделал
но таты получают ошибку в течение нескольких миллисекунд, а появляется красный экран . потому что , когда геолокационный указатель пытался получить широту и долготу, значение lat1 и lon1 равно null , тогда "красный экран « также появится, когда GPS выключен.
это мой код функции геолокации
class _HomePageState extends State<HomePage> {
Geolocator geolocator = Geolocator();
Position _currentUserPosition;
var distance;
@override
void initState() {
super.initState();
_initCurrentUserLocation();
}
@override
void didUpdateWidget(Widget oldWidget) {
super.didUpdateWidget(oldWidget);
setState(() {
_currentUserPosition = null;
});
}
_initCurrentUserLocation() async {
geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.best,
).then((position) {
if (mounted) {
setState(() =>_currentUserPosition = position);
}
}).catchError((e) {});
}
и эта моя сборка виджетов с использованием ListView Builder для получения значения lat2 и lon2 из файла массива.
double calculateDistance(lat1, lon1, lat2, lon2){
var p = 0.017453292519943295;
var c = cos;
var a = 0.5 - c((lat2 - lat1) * p) / 2 +
c(lat1 * p) * c(lat2 * p) *
(1 - c((lon2 - lon1) * p)) / 2;
return 12742 * asin(sqrt(a));
}
@override
Widget build(BuildContext context) {
final coordinateData = Data.dataArray;
var distance;
return ListView.builder(
itemCount: dataCoordinate.length,
itemBuilder: (context, index) {
distance = calculateDistance(
_currentPosition.latitude, _currentUserPosition.longitude,
coordinateData[index].lat, coordianteData[index].long
);
return ListTile(
title: Text(distance.toStingAsFixed(2)),
);
},
);
}
мой запрос
Как установить значение distance is null когда lat1 и lon1 по-прежнему null , или gps на мобильном телефоне выключен ?