Для достижения наилучших результатов вы должны использовать kCLLocationAccuracyBest. То, что вы положите в свой дистанционный фильтр, зависит от того, с какими неисправностями вы готовы столкнуться. По сути, вам придется принимать решения, основанные на точности и доступности. То есть, в периоды, когда нет лучшего ответа, что вы будете отображать?
Один из подходов состоит в том, чтобы телефон давал менее точные ответы и, используя прогноз того, что происходило в прошлый раз, когда у вас была информация с наилучшей точностью, проверяет, имеет ли то, что у вас есть, смысл.
То есть предположим, что я бегаю со скоростью 6 миль в час на север. Вы прокладываете меня вдоль точки A, точки B, точки C ... затем вы получаете ответ с низкой точностью (возможно, kCLLocationAccuracyNearest100Meters.) Посмотрите на то место, где написано, что я нахожусь, и выясните, "мог бы я дойти до этого определить точку C, если я продолжу свой текущий путь, делая разумные поправки на возможные изменения скорости? " Если это так, то новая точка находится в пределах возможного. (Если нет, то выбросьте это.) Затем спроецируйте из точки C на мою последнюю известную скорость и выясните, где, по вашему мнению, я, баллистически. Сохраните это как баллистическая точка-D.
Конечно, вы используете акселерометр, чтобы получить какой-то инерционный смысл, по которому я пошел, верно? Таким образом, вы не можете знать направление (вы не знаете, куда указывает телефон), но вы можете сделать разумный удар на расстоянии.
Используя всю эту информацию, нарисуйте наиболее вероятное место, где вы думаете, я, вероятно, нахожусь.
ПРИМЕЧАНИЕ: при тестировании не просто ездите в зонах с хорошей сотовой связью. Посмотрите, как ваше приложение работает вдали от мобильных телефонов. Многие люди любят кататься на велосипеде и бегать трусцой в этих местах!