带有kCLLocationAccuracyBestForNavigation的CLLocationManager不太准确

时间:2019-07-02 14:14:29

标签: ios swift core-location

我正在为跑步者开发一个应用程序,因此我需要高精度的GPS坐标。 Android版本已经准备就绪,现在我正在测试iOS版本。我通过以下方式在Swift中使用默认的位置提供程序:

locationManager = CLLocationManager()
            locationManager.delegate = self
            locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
            locationManager.distanceFilter = 1.0
            locationManager.requestAlwaysAuthorization()
            locationManager.allowsBackgroundLocationUpdates = true

然后我以这种方式处理坐标:

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

        let location = locations.last as CLLocation?
        let accuracy = location?.horizontalAccuracy

}

当精度低于20时,我会在“位置”中处理坐标并在地图上显示位置。效果不错,但准确性远远不及

kCLLocationAccuracyBestForNavigation应该给出最佳结果,但是...

今天,我同时在两台设备上进行测试:一台Android设备(价格:150美元)和iPhone X(价格:1000美元)。 Android设备始终向我显示该位置,该位置距我的真实位置最多10米。上面带有代码的iPhone X在70%的时间内向我显示了离我实际位置大约30-40米的位置。对于正在运行的提供口头指示的应用程序来说,这还不够。

难道iPhone X的GPS接收器的质量不及华为Y5的GPS接收器吗?环境条件完全一样。

是否可以接收更准确的位置?

1 个答案:

答案 0 :(得分:0)

我会建议你

locationManager.desiredAccuracy = kCLLocationAccuracyBest

根据以下链接中的文档,知道此选项将使用您设备上的最大电量

CLLocationAccuracy

请注意,以下代码旨在用于汽车导航

locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation