Intereting Posts

Как рассчитать расстояние во время ходьбы в андроиде?

Я разрабатываю демо для своего приложения, в котором есть две кнопки с именем «START» и «STOP». Когда пользователь нажимает «START», он начнет ходить. Я хочу сделать так, чтобы, когда пользователи нажимают «STOP», демо будет вычислять его расстояние между «START» и «STOP». Если пользователь нажал «START» и нажал «STOP», не делая ни одного шага, он должен показывать 0 км или 0 м. Я не знаю, как мне это начать; Пожалуйста, сделайте предложение.

Solutions Collecting From Web of "Как рассчитать расстояние во время ходьбы в андроиде?"

Один из способов сделать это – использовать данные акселерометра. Ваше приложение должно непрерывно записывать данные акселерометра после нажатия пользователем кнопки «Пуск». Вы будете наблюдать пик в своих данных всякий раз, когда пользователь делает шаг. Примените фильтр к этим данным, и вы сможете определить количество шагов, предпринятых с разумной точностью. Умножьте его на длину шага, и вы должны получить приблизительное расстояние пройденного расстояния. Возьмите высоту пользователя в качестве входного аргумента. Длина шага составляет около 0,45 * Высота человека. Поскольку этот подход не зависит от GPS, он также будет работать в помещении. EDIT: вам нужно использовать значения акселерометра для всех трех осей, чтобы сделать его довольно независимым от ориентации устройства. Вы можете пойти с x ^ 2 + y ^ 2 + z ^ 2

Существуют разные способы сделать это:

  1. GPS : продолжайте добавлять расстояние GPS между 2 точками каждые X секунд (скажем, 10 секунд). Проверьте Android Location.distanceTo или distanceBetween. Проверьте приложение My Tracks , это с открытым исходным кодом. GPS недоступен в закрытом помещении и имел бы ошибку, если пользователь меняет направление очень часто (читается каждые 1-2 секунды)
  2. Акселерометр : найдите код / ​​библиотеку для определения шага с помощью акселерометра. Расстояние происходит от двойной интеграции ускорения, ошибки могут складываться очень быстро здесь.
  3. Детектор шагов : встроенный в Nexus 5 . Google, возможно, позаботился об ошибках акселерометра. Это аппаратное вычисление, потребляет меньше батареи, но не доступно в большинстве телефонов на дату.

Вы также можете проверить мертвую раскладку пешеходов

Попросите разрешения GPS в своем приложении. Когда старт используется, запишите координаты GPS. Сделайте то же самое для остановки. Теперь у вас две координаты. Затем вы можете применить формулу расстояния, чтобы получить общее пройденное расстояние.

Редактировать:

Что касается случая, проясненного в комментариях, я думаю, что вам нужно заглянуть – это датчики движения Android. Возможно, вам придется сделать много предположений или попросить своих пользователей откалибровать ваше приложение перед фактическим использованием.

Предположим, что вы знаете темп вашего пользователя. Используя датчик движения, время, в течение которого пользователь «гуляет» (очевидно, нет простого способа определить, действительно ли ваш пользователь идет или просто встряхивает телефон). Умножьте это на коэффициент темпов вашего пользователя, и вы получите довольно грубое представление о том, сколько хождения сделал ваш пользователь.

Комментарий к «Есть одна проблема с этим решением: если вы путешествуете с постоянной скоростью, ускорение равно 0, поэтому акселерометр обычно не набирает никаких показаний. – jnovacho 16 secs ago» (извините, не хватает репутации для комментариев напрямую)

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

Я пошел с методом Gps. Со следующими шагами: нажатием кнопки запуска широта и долгота начальной точки были выбраны и сохранены в моем dto с помощью соответствующего TripId.

Нажатием кнопки остановки:

TripDto dto = service.GetStartLatLong(TripIdA); double lat = Double.valueOf(dto.getStartLati()); double lon = Double.valueOf(dto.getStartLongi()); Location locationa = new Location("point A"); locationa.setLatitude(lat); locationa.setLongitude(lon); double distance = location.distanceTo(locationa); 

Расстояние, возвращаемое методом location.distanceTo (), находится в метрах.

 public double getDistance(double lat1, double lon1, double lat2, double lon2) { double latA = Math.toRadians(lat1); double lonA = Math.toRadians(lon1); double latB = Math.toRadians(lat2); double lonB = Math.toRadians(lon2); double cosAng = (Math.cos(latA) * Math.cos(latB) * Math.cos(lonB-lonA)) + (Math.sin(latA) * Math.sin(latB)); double ang = Math.acos(cosAng); double dist = ang *6371; return dist; } 

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

Библиотека шагомера

Будет обновлен этот ответ с более указанным кодом, если вы хотите пойти с датчиком.