我一直在测试CoreLocation各个方面的准确性,并且惊讶地发现传递给CLLocationMangerDelegate方法的新旧位置提供的准确度值:( void)locationManager:didUpdateToLocation:fromLocation本身非常不准确。
走一段路面(沿着一段道路与建筑物一侧)我发现,虽然CLLocationManager声称它提供的CLLocations具有5米的水平精度,实际上MKUserAnnotation显示的位置是距离我所知道的位置最远30米的任何东西(通常显示为一排建筑物的对面)。这表明精确度读数本身并不准确。 CLLocationManager告诉我它的坐标精确到5米以内但实际上多达30米。
澄清一下,这不是缓存/时间戳问题它在某些领域是可重复的,而不是随着时间的推移而改善的。
还有其他人遇到过这个问题吗?
答案 0 :(得分:8)
CoreLocation不是人类,不知道你“真正”在哪里,是你问题答案的本质。它正在使用您设备上的传感器并为您提供最佳答案,并且能够知道其声称答案的准确性的问题反映出位置问题本质上非常困难。
要深入了解位置数据本身:CoreLocation从单元塔三角测量,附近的SSID以及最终的GPS中抽取,以确定设备的位置。它们具有不同程度的准确性,但它们的共同之处在于,如果您让设备工作更长时间,您将获得更准确的答案。但是,因为CoreLocation使用的所有工具在电池寿命方面都很昂贵,所以只要它产生符合“足够好”标准的答案,它就会停止。
这就是为什么另一个答案告诉你set your desiredAccuracy kCLLocationAccuracyBestForNavigation
- 当你这样做时,你基本上告诉CoreLocation“告诉我你得到的最好”,你也自愿提供随之而来的CPU负载,时间和电池消耗。你也已经脱离了CoreLocation用来确定什么是“足够好”的正常规模 - 而不是提前告诉它何时可以停止,你基本上已经说过“我会告诉你什么时候它已经足够好了。”
围绕回来:CoreLocation正在忠实地报告其答案的准确性,只是这些答案所依据的数据存在问题,如果它对其准确性声明的准确性有更多了解,则会在其准确性声明中反映出这一点。 。考虑一下假设情况,其中CoreLocation确切地知道其准确性声明的准确程度,然后是CoreLocation对其准确性声明的准确程度一无所知的情况,并考虑如何设计API来解决问题。 CoreLocation是可以肯定的,因为它可以合理地确定它是多么确定,如果你能够找到一种易于管理的硬件限制方式来更加确定你是多么肯定,App Store的财富等待着您。
答案 1 :(得分:4)
硬件需要一些时间才能获得准确性。最佳准确度是在2-3秒内65米。否则你有1414米的准确度
答案 2 :(得分:0)
将desiredAccuracy设置为kCLLocationAccuracyBestForNavigation
这是你能得到的最好的。