CoreLocation的准确性测量有多准确

我一直在testingCoreLocation的各个方面的准确性,并且惊讶地发现传递给CLLocationMangerDelegate方法的新旧位置提供的准确性值:(void)locationManager:didUpdateToLocation:fromLocation本身是非常不准确的。

走过一段路面(沿着一条沿着一侧build筑物的道路),我发现虽然CLLocationManager声称它所提供的CLLocations具有5米的水平精度,实际上MKUserAnnotation所显示的位置是任何达到离我所在的位置30米远(通常显示为一排build筑物的对面)。 这表明准确度读数本身并不准确。 CLLocationManager告诉我它的坐标精确到5米以内,但实际上多达30米。

澄清,这不是一个caching/时间戳问题它是在某些地区可重复,而不是随着时间的推移而改善。

有没有其他人遇到过这个问题?

CoreLocation不是一个人,不知道你的“真正”在哪里,是你的问题的答案的本质。 它正在使用您设备上的传感器,并为您提供最佳的答案,并且知道其声称的答案的准确性的问题,反映出问题的本质上是非常困难的。

为了离开位置数据本身:CoreLocation从手机信号塔三angular测量,附近的SSID以及最后的GPS绘图来确定设备的位置。 这些确实有不同程度的准确性,但是他们的共同之处在于,如果让设备工作更长时间,您将得到更准确的答案。 但是,由于CoreLocation使用的所有工具在电池寿命方面都很昂贵,因此一旦生成满足您“足够好”标准的答案,就会停止。

这就是为什么另一个答案告诉你将你想要的kCLLocationAccuracyBestForNavigation 设置为kCLLocationAccuracyBestForNavigation当你这样做的时候,你基本上是在告诉CoreLocation“展示你最好的东西”,而且你还自愿为CPU负载,时间和电池耗尽,随之而来。 CoreLocation用来判断什么是“足够好”,而不是提前告诉它什么时候可以停止,你基本上已经说过“我会告诉你什么时候足够好”。

CoreLocation将继续尝试给你更好的答案,直到你告诉它你已经完成了,你需要履行你的责任来决定这个点是什么。 这也是你需要牢记CoreLocation库中的工具有多精确的限制 – 你可以获得大量经纬度的有效数字,但是通过大规模的冒险,你可以自愿为弄清楚这些数字是多么值得信赖的任务。 预定义的精度范围是10米,100米,1公里和3公里。 CoreLocation的创build者select这些分界点的事实应该告诉你一些关于这个问题的困难 – 如果更好的准确性很容易,那么它可能已经在框架中。

所以回头看看:CoreLocation是忠实地报告答案的准确性的,只是这些答案的基础数据是有问题的,如果它对准确性要求的准确性有更多的了解,就会在准确性要求中反映出来。 考虑一下CoreLocation准确知道其准确性声明有多准确的假设情况,然后CoreLocation不知道准确性声明的准确性,并考虑如何deviseAPI来解决问题。 CoreLocation是可以合理确定的,如果你能弄明白一个硬件限制的方法来确定你是多么的确定,App Store的财富正在等待您。

硬件需要一些时间来获得准确性。 在2-3秒内最好的精度是65米。 否则你有1414米的准确性

将您所需的kCLLocationAccuracyBestForNavigation设置为kCLLocationAccuracyBestForNavigation

这是最好的,你可以得到。