2

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

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

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

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

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

你对我有什么提示吗?我该如何解决我的问题?

4

2 回答 2

3

您的 if 块的问题是您正在比较horizontalAccuracy(以米为单位报告)与desiredAccuracy设置为常量值 的kCLLocationAccuracyBestForNavigation。这些常量没有在文档中定义,但其他常量只是枚举。所以 kCLLocationAccuracyBestForNavigation 可能只是字面上等于 0。您的 Horizo​​ntalAccuracy 永远不会小于或等于零。

您需要根据实际数字测试水平精度。我得到的最好的水平精度是 5.0。因此,您可能希望将 if 语句更改为!(newLocation.horizontalAccuracy > 5.0).

于 2010-11-15T15:06:59.890 回答
1

我需要纠正我的最后一个分析器。kCLLocationAccuracyHundredMeters 实际上解析为 100。千米 (1000) 和 threkilometers (3000) 也是如此。因此,您可以使用它们进行比较。但是,kCLLocationAccuracyBest 为 -1,BestForNavigation 为 -2。因此,您无法将您的水平精度与那些进行比较。

于 2010-11-16T16:04:02.773 回答