iPhone CoreLocation - 准确性无法正常工作?

时间:2010-08-15 21:55:46

标签: ios4 cllocationmanager

我正在开发一个使用gps的应用。我需要高精度,所以我使用kCLLocationAccuracyBestForNavigation for desiredAccuracy。 当我运行应用程序时,下面的方法按预期调用。

(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{

在这个方法中,我正在检查以下代码段的准确性是否足够好:

if (newLocation.horizontalAccuracy <= locationManager.desiredAccuracy) {
...
}

但是这个if-block永远不会被激活,因为newLocation.horizo​​ntalAccuracy不会低于17.00米。当我在iPhone 3GS OS 3.1.2上运行此代码时,一切运行正常。但自从我升级到4.0.1后,似乎准确性存在问题。它甚至不能与kCLLocationAccuracyNearestTenMeters一起使用,它也在iOs 3.1.2上运行平稳且稳定。

你对我有什么提示吗?我怎么能解决我的问题?

2 个答案:

答案 0 :(得分:3)

if块的问题在于您要比较以{米为单位报告的horizontalAccuracydesiredAccuracy进行比较,kCLLocationAccuracyBestForNavigation设置为常量值!(newLocation.horizontalAccuracy > 5.0)。这些常量未在文档中定义,但其他常量只是枚举。所以kCLLocationAccuracyBestForNavigation可能只是字面上等于0.你的horizo​​ntalAccuracy永远不会小于或等于零。

您需要根据实际数字测试水平精度。我得到的最佳水平精度是5.0。因此,您可能希望将if语句更改为{{1}}。

答案 1 :(得分:1)

我需要纠正我的最后一次。 kCLLocationAccuracyHundredMeters实际上解析为100.公里(1000)和测力计(3000)也是如此。所以,您可以使用它们进行比较。但是,kCLLocationAccuracyBest为-1,BestForNavigation为-2。所以,你无法将你的horizo​​ntalAccuracy与那些进行比较。