В основном я хочу знать направление, в котором iPhone указывает с высокой точностью, я попробовал CLLocationManager: проблема в том, что CLHeading. MagneticHeading возвращает двойное значение, например 36,44323, но затем, когда я начинаю поворачивать устройство, CLLocationManager только обновляет направление, когда оно достигает 1 градуса , поэтому числа читаются так: 36,44323, 37,44323, 38,44323 и так далее. Можно ли добиться большей точности?
Можно ли получить точность менее градуса в направлении компаса iOS?
Ответы (4)
Установите CLLocationManager
headingFilter
на kCLHeadingFilterNone
или что-то меньшее, чем 1 градус по умолчанию.
Если вас не волнует точность, но вас интересуют небольшие изменения направления, вы можете посмотреть на CMMotionManager
. Это было свойство (deviceMotion
), которое позволит вам получить attitude
устройства, в частности yaw
. Записывая разницу (скажем, x
) между рысканием и магнитным курсом при каждом обновлении курса, вы можете получить приблизительный курс между обновлениями как yaw + x
. Вы будете получать более своевременные обновления от CMMotionManager
, потому что вы можете установить deviceMotionUpdateInterval
самостоятельно.
Если я правильно помню, значение yaw
возвращается в радианах между -pi и pi, поэтому вам нужно будет преобразовать обратно в градусы при расчете x
, поскольку CLLocationManager
вернет магнитный курс в градусах (от 0 до 360).
Вероятно, вы также захотите внести коррективы в ориентацию устройства. Компас возвращает данные о курсе с верхней части устройства, поэтому, если вы находитесь в ландшафте слева, вам нужно будет вычесть 90 из значения направления, в ландшафте справа вам нужно будет добавить 90 к значению направления, а в портретеВверху вниз потребуется корректировка на 180.
Не то чтобы я знаю, нет.
И не путайте точность с правильностью; только потому, что он говорит 36,44323, это не означает, что он точен до 5 знаков после запятой, границы ошибки для этого значения могут составлять ± 1 градус :(
Я не думаю, что компас на iPhone имеет достаточно высокую точность, чтобы с уверенностью сказать, в каком направлении вы указываете, с нужной вам точностью. Извиняюсь!
Вы должны использовать гироскоп, если вам нужна большая точность. Данные о движении устройства от CoreMotion должны помочь вам в этом. Компас действительно недостаточно точен.
desiredAccuracy
наCLLocationManager
наkCLLocationAccuracyBestForNavigation
? Это будет использовать больше, чем просто магнитометр (например, гироскоп). Может быть, это даст вам лучшую точность? - person larsacus   schedule 12.04.2012