Можно ли получить точность менее градуса в направлении компаса iOS?

В основном я хочу знать направление, в котором iPhone указывает с высокой точностью, я попробовал CLLocationManager: проблема в том, что CLHeading. MagneticHeading возвращает двойное значение, например 36,44323, но затем, когда я начинаю поворачивать устройство, CLLocationManager только обновляет направление, когда оно достигает 1 градуса , поэтому числа читаются так: 36,44323, 37,44323, 38,44323 и так далее. Можно ли добиться большей точности?


person Hadi    schedule 12.04.2012    source источник
comment
Вы установили desiredAccuracy на CLLocationManager на kCLLocationAccuracyBestForNavigation? Это будет использовать больше, чем просто магнитометр (например, гироскоп). Может быть, это даст вам лучшую точность?   -  person larsacus    schedule 12.04.2012
comment
Да, проверял это, но результат тот же, я также безуспешно делал это: 1- установить для headingFilter значение меньше 1, а также установить для него значение kCLHeadingFilterNone , 2- создать отдельный поток для чтения данных CLLocationManager вручную между обновлениями и 3 - вызывать stopUpdatingHeading в конце метода didUpdateHeading и снова включать его с помощью отдельного потока, но результат ненадежен, так как требуется время, чтобы результаты стали стабильными.   -  person Hadi    schedule 12.04.2012


Ответы (4)


Установите CLLocationManager headingFilter на kCLHeadingFilterNone или что-то меньшее, чем 1 градус по умолчанию.

person user1837234    schedule 19.11.2012
comment
это не повысит точность, только будет чаще обновляться - person Danut Pralea; 17.07.2013

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

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

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

person Christopher Jones    schedule 20.08.2012

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

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

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

person deanWombourne    schedule 12.04.2012
comment
Меня не волнует правильность числа, а скорее меня интересует очень небольшое изменение направления устройства. Должна быть причина, по которой результирующее число является двойным, а не целым, - person Hadi; 12.04.2012

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

person Peter Kuhar    schedule 06.10.2012