Расчет расстояния ходьбы для пользователя с течением времени - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь отследить расстояние, которое пользователь прошел со временем в моем приложении, используя GPS. У меня есть основная идея, поэтому я сохраняю предыдущее местоположение, и когда отправляется новое местоположение GPS, я вычисляю расстояние между ними и добавляю это к общему расстоянию. Пока все хорошо.

У этой простой реализации есть две большие проблемы:

  1. Поскольку GPS является неточным, когда пользователь перемещается, точки GPS будут не прямой линией, а скорее образцом "зигзага", из-за которого будет выглядеть, будто пользователь двигался дольше, чем он фактически двигался.
  2. Также проблема точности. Если телефон просто лежит на столе и опрашивает возможности GPS, ответ, как правило, каждый раз различается на пару метров, поэтому вы видите, что счетчики начинают накапливаться, даже когда телефон не работает.

И то, и другое делает слежку бесполезной, поскольку число, которое я предоставляю, далеко не достаточно точное.

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

Итак, что мне нужно, так это алгоритм, в котором я могу указать свои GPS-позиции и получить максимально точное приближение пройденного расстояния.

Обратите внимание, что я не могу предположить, что пользователь будет следовать по дорогам, поэтому я не могу использовать для этого Google Matrix API или аналогичный.

1 Ответ

0 голосов
/ 03 мая 2018

Это распространенная проблема с данными о местоположении, которые генерируются GPS-приемниками. Типичный приемник потребительского уровня, который я использовал, имеет точность определения местоположения, определенную как CEP 2,5 метра. Это означает, что для стационарного приемника в «идеальной» среде обзора неба с течением времени 50% координат местоположения будут находиться в круге с радиусом 2,5 метра. Если вы посмотрите на положение, о котором сообщает приемник, он, кажется, случайно блуждает вокруг истинного положения, иногда отодвигаясь на несколько метров от его истинного положения. Если вы просто интегрируете расстояние, пройденное между выборками, вы получите очень большое видимое расстояние, пройденное для стационарного устройства.

Простой алгоритм, который я довольно успешно использовал для функции одометра транспортного средства, выглядит следующим образом

for(;;)
{
    Stored_Position = Current_Position ;
    do 
    {
       Distance_Moved = Distance_Between( Current_Position, Stored_Position ) ;
    } while ( Distance_Moved < MOVEMENT_THRESHOLD ) ;

    Cumulative_Distance += Distance_Moved ;
}

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...