Самая простая возможная реализация - сохранить начальное местоположение, возвращаемое обратным вызовом, в переменную.Всякий раз, когда вы получаете новый, проверьте, насколько это далеко.Если расстояние больше X, он сдвинулся.Сравните время на двух мероприятиях.Вот как долго он оставался на одном месте.Х должен быть не менее 10 м, потому что GPS не достаточно точен, чтобы получить меньше, чем без большого количества ложных срабатываний.
Это как бы даст вам ответ.Следующий уровень - фильтрация ложных срабатываний.Время от времени вы будете получать действительно странный результат, который может быть хорошей частью мили.Вы должны отфильтровать их.Я бы начал просто делать что-то простое, например, подождать, пока вы получите 4 или 5 результатов за пределами вашего радиуса, а затем предположить, что он переехал.Это может также позволить вам уменьшить радиус, так как вы более изолированы от шума.
Конечно, вы также захотите отфильтровывать очень короткое пребывание, как если бы вы шли, вы можетеполучить несколько показаний, показывающих вас в одном месте, потому что вы не ходите все так быстро.Самый простой способ сделать это - потребовать, чтобы у вас было N результатов примерно в одном и том же месте, прежде чем вы там себя представили.
Это поможет вам начать.Оттуда вам нужно будет увидеть, где находятся неправильные данные, и найти собственные решения.