2015-12-04 3 views
0

Как рассчитать совокупное расстояние, пройденное с помощью Android GPS?Android - Как рассчитать совокупное расстояние с помощью GPS

Я использую службы Android Location для прослушивания событий изменения местоположения, но просто нахожу дистанцию ​​от последней точки до новой точки и добавляя ее в текущую итоговую информацию о том, что я путешествовал на расстоянии, когда я канцелярские товары.

public void onLocationChanged(Location newLocation) { 
    if (lastLocation != null)) { 
     distanceTravelled = distanceTravelled + lastLocation.distanceTo(newLocation); 
     Toast.makeText(this, distanceTravelled + "", Toast.LENGTH_SHORT).show(); 
    } 
    lastLocation = newLocation; 
} 

Я предполагаю, что мне нужно принять во внимание точности каждой точки местоположения перед добавлением его к нарастающему итогу. Есть ли алгоритм для этого?

Заранее благодарен!

ответ

1

Существует несколько способов сделать это. Один - отказаться от небольших движений. Если вы получаете обновление местоположения, а пройденное расстояние меньше R, игнорируйте его. По мере того, как R становится больше, вы полностью устраняете шум, но можете исключить реальные движения, меньшие, чем R. Вы можете найти R, который достаточно хорош для вашей проблемы на основе проб и ошибок.

Другим способом было бы сделать что-то вроде фильтра Калмана, который рассматривает ваше положение как функцию вероятности. Но это связано с множеством сложной математики и имеет некоторые из тех же проблем, что и подход падения.

Другим методом было бы объединить данные с данными акселерометра, чтобы определить, действительно ли вы начали двигаться. Google делает это в своем коде обнаружения активности. Цель здесь заключалась бы в том, чтобы определить, когда вы начинаете и останавливаетесь, наблюдая всплески ускорителя и игнорируя небольшие движения, если не претерпели всплески (включая большие движения, поскольку это может быть движение с постоянной скоростью).

Ничто не даст вам 100% точности, конечно. Но вы должны иметь хорошие результаты от этих методов.

+0

Спасибо за ответ! У меня просто была эта идея, которая, как мне кажется, основана на первом методе, о котором вы говорили. Но не уверен, что с этим что-то явно не так? 'общественная пустота onLocationChanged (Location newLocation) { если (lastLocation! = NULL && lastLocation.distanceTo (newLocation)> = lastLocation.getAccuracy() + newLocation.getAccuracy()) { distanceTravelled = distanceTravelled + lastLocation. distanceTo (newLocation); Toast.makeText (это, distanceTravelled + "", Toast.LENGTH_SHORT) .show(); } lastLocation = newLocation; } ' – User24231

+0

Итак, getAccuracy возвращает 68% -ный доверительный радиус - на 68% вы используете счетчики getAccuracy позиции. Итак, в 3 раза вы будете снаружи. Поскольку вы добавляете 2 точности, вы будете внутри нее гораздо чаще. Вы будете пропускать небольшие движения, хотя точность на устройстве андроида может быть не хуже 10 м, поэтому, удвоив его, вы пропустите любое движение в радиусе 20 м (если только движение не покинет его). –

Смежные вопросы