【发布时间】:2020-03-24 13:43:14
【问题描述】:
我正在尝试使用此公式计算两个位置之间的距离
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));
}
lat1 和 lon1 的值来自 geolocator: 使用 getCurrentPosition,而
lat2和lon2的值来自我制作的array class
但在几毫秒内出现错误,然后出现红屏。 因为在geolocator尝试获取经纬度时,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)),
);
},
);
}
我的要求是
lat1且lon1仍为nulldistance的值为null /strong>,或者手机上的 GPS 已关闭?
【问题讨论】: