iPhone CoreLocation - точность не работает правильно? - PullRequest
2 голосов
/ 16 августа 2010

Я разрабатываю приложение, которое использует GPS.Мне нужна высокая точность, поэтому я использовал kCLLocationAccuracyBestForNavigation для желаемой точности.когда я запускаю приложение, следующий метод вызывается, как и ожидалось.

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

в рамках этого метода я проверяю, достаточно ли высока точность для следующего сегмента кода:

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

, но этот блок if никогда не активируется, как newLocation.horizontAccuracyне опускается ниже 17,00 метров.Когда я запускал этот код на iPhone 3GS OS 3.1.2, все работало нормально.но так как я обновил до 4.0.1, кажется, что есть проблема с точностью.Он даже не работает с kCLLocationAccuracyNearestTenMeters, который также работал гладко и стабильно на iOs 3.1.2.

У вас есть какие-нибудь подсказки для меня, что происходит и как я могу решить мою проблему?

Ответы [ 2 ]

3 голосов
/ 15 ноября 2010

Проблема с вашим блоком if заключается в том, что вы сравниваете horizontalAccuracy, который указывается в метрах, с desiredAccuracy, который устанавливается как постоянное значение kCLLocationAccuracyBestForNavigation. Эти константы не определены в документации, но другие константы просто перечислены. Поэтому kCLLocationAccuracyBestForNavigation может быть буквально равно 0. Ваша горизонтальная точность никогда не будет меньше или равна нулю.

Вам необходимо проверить свою горизонтальную точность по сравнению с фактическим числом. Лучшая горизонтальная точность, которую я получил, - 5,0. Таким образом, вы можете изменить выражение if на !(newLocation.horizontalAccuracy > 5.0).

1 голос
/ 16 ноября 2010

Мне нужно исправить свой последний ансер. kCLLocationAccuracyHundredMeters фактически разрешается до 100. То же самое касается километра (1000) и трекилометров (3000). Таким образом, вы можете использовать их для сравнения. Однако kCLLocationAccuracyBest имеет значение -1, а BestForNavigation - -2. Таким образом, вы не можете сравнить вашу горизонтальную точность с этими.

...