2012-04-12 8 views
1

В принципе, я хочу знать направление iPhone, указывающее с высокой точностью, я попробовал CLLocationManager: проблема в том, что CLHeading.magneticHeading возвращает double, например 36.44323, но затем, когда я начинаю поворачивать устройство, CLLocationManager только обновляет направление, когда оно достигает 1 градус, поэтому цифры читаются следующим образом: 36.44323, 37.44323, 38.44323 и т. Д. Возможно ли иметь больше точности?Можно ли получить точность менее точности в заголовке компаса iOS?

+0

Установили ли вы 'желаемое свойство 'на' CLLocationManager' 'kCLLocationAccuracyBestForNavigation'? Это будет использовать больше, чем просто магнитометр (например, гироскоп). Может быть, это даст вам лучшую точность? – larsacus

+0

Да, проверено это, но результат тот же, я тоже сделал это без везения: 1 - установка заголовкаFilter до менее 1, а также установка его в kCLHeadingFilterNone, 2- создание отдельного потока для чтения данных CLLocationManager вручную между обновлениями и 3- для вызова stopUpdatingHeading в конце метода didUpdateHeading и повторного включения его с помощью отдельного потока, но результат не является надежным, так как для достижения стабильности требуется некоторое время. – sadegh

ответ

1

Не знаю, что я знаю, нет.

И не путайте точность с правильностью; просто потому, что он говорит, что 36.44323 не означает, что он является точным до 5 знаков после запятой. Оценки ошибок на этом значении могут быть ± 1 градус :(

Я не думаю, что компас на iPhone имеет достаточно высокую точность с любой реальной уверенностью, какое направление вы указываете на нужную вам точность.

+2

Меня не волнует правильность номера, но меня интересует очень небольшое изменение в направлении устройства. Должна быть причина, по которой полученное число будет двойным, а не целочисленным, – sadegh

1

Если вы не заботитесь о точности, но интересуетесь небольшими изменениями в направлении, то вы можете посмотреть на CMMotionManager. (deviceMotion), который позволит вам получить attitude устройства, в частности yaw. Записывая разницу (скажем x) между рысканием & магнитный заголовок в каждом обновлении заголовка вы можете получить приблизительный заголовок между обновлениями как yaw + x. Вы получите более своевременные обновления от CMMotionManager, так как вы можете сами установить deviceMotionUpdateInterval.

Если я правильно помню, значение yaw возвращается в радианах между -pi и пи так что вам нужно будет конвертировать обратно в градусах при расчете x как CLLocationManager вернется магнитный курс в градусах (от 0 до 360).

Возможно, вы захотите также внести коррективы в ориентацию устройства. Компас возвращает данные заголовка с верхней части устройства, поэтому, если вы находитесь в LandscapeLeft, вам нужно будет вычесть 90 ° из значения курса, landscapeRight вам нужно будет добавить 90 ° в значение курса, а для портретаUpsideDown потребуется настройка 180 ° ,

0

Вы должны использовать гироскоп, если вам нужна более высокая точность. Данные о движении устройства от CoreMotion должны помочь вам в этом. Компас действительно недостаточно точен.

4

CLLocationManagerheadingFilter до kCLHeadingFilterNone или что-то меньшее, чем стандартная 1 градус.

+0

это не повысит точность , он будет обновляться чаще –