#ios #objective-c #core-location
#iOS #objective-c #ядро-местоположение
Вопрос:
Я работаю над приложением, в котором я показываю местоположение и направление, в котором движется самолет во время полета. Я также хочу затем показать метки городов, над которыми пролетаешь, используя дополненную реальность. У меня все настроено, и оно работало нормально, когда я сидел неподвижно или вел машину, но когда я использовал его в самолете, произошло что-то странное. Когда вы находитесь у выхода с открытой или закрытой дверью, заголовок значка местоположения показывает правильное направление, когда устройство находится в ландшафтном режиме (кнопка home справа). Если я поворачиваю устройство вправо, значок плоскости поворачивается вправо на соответствующую величину. То же самое с левой. Это важно, потому что, когда я поворачиваю телефон вправо или влево и открываю камеру для дополненной реальности, правильные города отображаются в правильном месте. Это работает абсолютно нормально, даже когда мы выруливаем на взлетно-посадочную полосу. Однако, когда мы снимаем функцию, она меняется. Теперь независимо от того, каким способом я изменяю поворот устройства, значок плоскости всегда указывает в направлении, в котором движется плоскость. Я пытаюсь выяснить, почему это происходит, и мне было интересно, связано ли это с тем, что при более низкой скорости сидения на месте или руления местоположение ядра использует заголовок, тогда как при взлете собирается достаточно информации для использования информации о КУРСЕ. Я не думаю, что это происходит из-за того, что я нахожусь в клетке Фарадея, потому что это не сработало бы при выходе на посадку или рулении. Если на самом деле используется информация о курсе, как мне компенсировать, чтобы метки городов были там, где они должны быть, вместо того, чтобы постоянно перемещаться в переднюю часть плоскости? я получаю пользовательскую широту, долготу и высоту, а также правильный курс к городам, так что все это работает нормально. Это просто проблема с заголовком / курсом.
Вот некоторый код, просто чтобы показать, что у меня все это происходит.
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyKilometer;
locationManager.distanceFilter = kCLDistanceFilterNone;
[locationManager startUpdatingLocation];
[locationManager startUpdatingHeading];
Могу ли я использовать гироскоп, чтобы определить, в каком направлении указывает телефон, и добавить его в заголовок / курс, чтобы получить метки в правильном месте, если скорость превышает определенную величину?
Кто-нибудь сталкивался с проблемой и решил ее?
Комментарии:
1. Эта документация Apple может помочь вам: developer.apple.com/documentation/coremotion ? язык = objc
Ответ №1:
Все это хорошо задокументировано Apple. Диспетчер определения местоположения использует ваше направление движения для определения направления и игнорирует положение телефона, если вы двигаетесь быстро. Если вы хотите независимо изменять положение телефона, вы должны использовать вместо этого Core Motion.
Комментарии:
1. Знаете ли вы, с какой скоростью (velocity) производится изменение. Это когда скорость больше 0 или 1?
2. Спасибо, использовал core motion и, похоже, работает, но придется подождать, пока я снова не полечу, чтобы убедиться в этом