我正在开发一个使用gps的应用。我需要高精度,所以我使用kCLLocationAccuracyBestForNavigation for desiredAccuracy。 当我运行应用程序时,下面的方法按预期调用。
(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{
在这个方法中,我正在检查以下代码段的准确性是否足够好:
if (newLocation.horizontalAccuracy <= locationManager.desiredAccuracy) {
...
}
但是这个if-block永远不会被激活,因为newLocation.horizontalAccuracy不会低于17.00米。当我在iPhone 3GS OS 3.1.2上运行此代码时,一切运行正常。但自从我升级到4.0.1后,似乎准确性存在问题。它甚至不能与kCLLocationAccuracyNearestTenMeters一起使用,它也在iOs 3.1.2上运行平稳且稳定。
你对我有什么提示吗?我怎么能解决我的问题?
答案 0 :(得分:3)
if块的问题在于您要比较以{米为单位报告的horizontalAccuracy
与desiredAccuracy
进行比较,kCLLocationAccuracyBestForNavigation
设置为常量值!(newLocation.horizontalAccuracy > 5.0)
。这些常量未在文档中定义,但其他常量只是枚举。所以kCLLocationAccuracyBestForNavigation可能只是字面上等于0.你的horizontalAccuracy永远不会小于或等于零。
您需要根据实际数字测试水平精度。我得到的最佳水平精度是5.0。因此,您可能希望将if语句更改为{{1}}。
答案 1 :(得分:1)
我需要纠正我的最后一次。 kCLLocationAccuracyHundredMeters实际上解析为100.公里(1000)和测力计(3000)也是如此。所以,您可以使用它们进行比较。但是,kCLLocationAccuracyBest为-1,BestForNavigation为-2。所以,你无法将你的horizontalAccuracy与那些进行比较。