Flutter:如何在用户移动时获得精确的速度和行进距离?

Flutter: How to get precise speed and traveled distance as the user moves?

我正在尝试构建一种健身应用程序。我想知道用户速度,还想显示用户行驶的距离。我已经知道如何使用 Geolocator 包获取它,但数据不够精确,事实上,即使用户不移动(并且行进距离增加),我也会收到位置更新。我想知道是否有更好的解决方案。其他健身应用怎么能这么精准?

华为Location Kit可能会帮助您解决问题。

Location Kit 将全球卫星导航系统 (GNSS)、Wi-Fi 和基站定位功能集成到您的应用程序中,构建全球定位功能,让您为全球用户提供基于位置的灵活服务。目前主要提供融合定位、activity身份识别、地理围栏三大能力。您可以根据需要调用其中一项或多项功能。

详情请参考Docs.

华为也为Flutter提供了一些HMS Core kit插件:

Reference documents

Location Kit plugins for Flutter

我正在使用 Geolocator for Flutter 构建类似的东西。 我不知道你是否在使用 Geolocator.getPositionStream,我知道,你可以在其中设置一个过滤器来消除运动中的噪音。 (https://pub.dev/documentation/geolocator/latest/geolocator/Geolocator/getPositionStream.html)

我通过速度(米/秒)计算距离,并通过将 intervalDuration 设置为 1 秒每秒获取该值。 在 iOS 上效果很好,但昨天才发现它在 Android 上根本不起作用。所以我在这里寻找解决方案。

你对这个问题有何看法?

double trip = 0.0;
positionStream = Geolocator.getPositionStream(
    intervalDuration: Duration(seconds: 1),
    desiredAccuracy: LocationAccuracy.high
    )
    .listen((pos) {
    if (pos != null) {
       
        // calculate distance from speed
        trip += pos.speed;
    }
}