为啥 CLLocationManager 在设置精度低时如此懒惰?

Posted

技术标签:

【中文标题】为啥 CLLocationManager 在设置精度低时如此懒惰?【英文标题】:Why is CLLocationManager so lazy when set with a low accuracy?为什么 CLLocationManager 在设置精度低时如此懒惰? 【发布时间】:2010-10-05 12:32:59 【问题描述】:

我通过测试发现,为CLLocationManager 设置较低的期望准确度会导致该组件出现错误行为。

这是我进行的 2 个测试:

    将所需精度设置为kCLLocationAccuracyHundredMeters。然后设备无法如我所愿准确地找到我的位置。以下是我的 CLLocationManager 代表的日志:

    Accuracy is 1500.000000 (desired accuracy is 100.000000)
    Accuracy is 1500.000000 (desired accuracy is 100.000000)
    

    就是这样。 30 秒内发生两个事件,水平精度为 1500。

    将期望精度设置为kCLLocationAccuracyBest。然后设备找到我!相同的日志:

    Accuracy is 1500.000000 (desired accuracy is -1.000000)
    ...
    Accuracy is 162.957953 (desired accuracy is -1.000000)
    ...
    Accuracy is 76.356886 (desired accuracy is -1.000000)
    ...
    Accuracy is 47.421634 (desired accuracy is -1.000000)
    

    我在与测试 1 相同的位置,但这次,设备能够以我首先想要的精度(即 100.0)找到我的位置。

我已经多次重复这两个测试,结果相同。

我的问题是:

“有谁知道为什么当我将精度设置为kCLLocationAccuracyHundredMeters 时,iPhone 设备不努力寻找我的位置?”

我假设将精度设置为kCLLocationAccuracyBest 可能会打开一些不同的硬件传感器,但这不能被视为错误吗?我在互联网上找不到与此问题相关的资料。

感谢您分享您自己的经验。 (测试是使用 3GS 设备通过 Wi-Fi 和电话网络进行的)

【问题讨论】:

【参考方案1】:

更精细的设置将尝试仅通过 Cell 和 Wi-Fi 三角测量来定位您,这并不准确。 kCLLocationAccuracyBest 将打开 GPS 模块并使用它,它应该在几英尺内。这不是错误,您在两种情况下都达到了您要求的准确性。

不同之处在于 GPS 比三角测量更消耗电池,这就是为什么如果您只需要将设备放置在粗糙区域内就不会使用它的原因。

【讨论】:

您好,感谢您的回答。它可能不是错误,因为您在最后得到了一个值,但是示例代码“LocateMe”被错误了,因为您可以看到类似:“if (location.accuracy 您要求特定的准确性。根据硬件和您当前的位置,您可能会也可能不会获得它,因此在这种情况下您可以决定做什么。例如,在人口稠密的城市中进行像元三角剖分可能比在偏僻的地方更准确。 LocateMe 将其丢弃,您可以使用它(例如,使用更大的定位圈),或者稍后决定您想要尝试更精确的读数,但需要权衡取舍。

以上是关于为啥 CLLocationManager 在设置精度低时如此懒惰?的主要内容,如果未能解决你的问题,请参考以下文章

为啥'CLLocationManager.locationServicesEnabled()'默认为真?

为啥 CLLocationManager 在模拟器中的 iphone SDK 4 beta 上返回空位置?

Xcode 6 为啥 CLLocationManager 没有返回纬度和经度

CLLocationManager 总是返回速度:-1

为啥 didUpdateLocations 位置 NSArray 中永远不会有多个位置?

CLLocationManager 和 distanceFilter?