Возможно, вам придется идти с «мертвым расчетом». В принципе, мертвый расчет - это метод навигации, в котором используется подтвержденное начальное местоположение, а также точная скорость и время для расчета нового местоположения. Имейте в виду, что скорость сама по себе является комбинацией заголовка и скорости и что заголовок должен быть истинным заголовком. В самолете заголовок компаса должен быть объединен со скоростью и направлением ветра, чтобы получить истинный заголовок. Я не думаю, что вам приходится учитывать дрейф в метро, но вам придется учитывать различную ориентацию устройства, когда пользователь перемещается или использует само устройство. Кроме того, только потому, что заголовок обычно является компасом, это не значит, что это должно быть. Вы можете выполнить работу, используя только акселерометры и таймер.
Правильное использование мертвых расчётов также требует частых «сбросов» в известные местоположения по мере их достижения, чтобы ошибки не могли скомпенсироваться. Для этого приложения я бы сказал, что определение кривых и стоп-сигналов может использоваться как сброс.Вы можете получить ложные срабатывания для «сервисных» остановок, которые слишком близки к реальным остановкам, но они могут быть достаточно редкими, чтобы игнорировать. Фактически, если бы это не было остановкой выхода, это могло бы не иметь значения, потому что вы все еще могли бы быть достаточно точными для предупреждения о следующей остановке, и если бы была остановка выхода, это не имело бы никакого значения, потому что поездка закончилась.
Подводя итог: вы должны быть уверены, что у вас есть хорошая начальная отправная точка; вам необходимо компенсировать переориентацию устройства, чтобы получить истинный заголовок; вам нужно знать свою среднюю скорость между изменениями курса и временем по заголовку для расчета расстояния по курсу. Вы можете повысить общую точность путем сброса на известных ориентирах.
Редактировать: Я не знаю, приближается ли это к ответу, но Крис Стрэттон поднял интересный момент о суммировании векторов акселерометра. Можно ли достаточно точно отслеживать ориентацию устройства, чтобы иметь надежный независимый от ориентации вектор гравитации? Можете ли вы сохранить это из своей векторной суммы? Может ли это обеспечить полезное ускорение вдоль полезного независимого от ориентации вектора? Если это так, то отслеживание продолжительности ускорения даст вам среднюю скорость для этой продолжительности и конечную скорость для окончания ускорения. При отсутствии ускорения скорость будет оставаться постоянной. Включение этого в совокупность могло бы свести неточность к неточности с точки зрения бесполезности.
Служба, подобная этой, должна быть надежной. Без четкого представления о южном небе у вас нет GPS, так что это невозможно. Измерение времени начала и окончания тоже отсутствует. Даже если у вас есть надлежащий фид данных, который был обновлен в прямом эфире, у вас все еще есть проблема с проблемами обновления и отсутствием службы сотовой связи в большинстве туннелей. Простое догадки о времени начала и окончания для этого не достаточно надежны. Честно говоря, лучший способ сделать эту работу - предупредить пользователя, на какой станции смотреть. – Brad
Вы можете подробно рассказать о том, как предупредить пользователя, на какой станции смотреть? например, пользователь выбирает станцию назначения, и каждые 2 минуты карта метро будет мигать на экране при мигании станции назначения? – user270811