Расчет скорости от 2 баллов - PullRequest
0 голосов
/ 17 мая 2011

Я знаю, что этот вопрос задавался много, но пока не удовлетворен Я пытаюсь использовать GPS устройства Android для расчета скорости. Многие люди, кажется, отвечают, говоря, что они просто используют функцию getSpeed ​​() объекта Location. Из того, что я понимаю, getSpeed ​​() будет работать только на определенных устройствах, у которых есть датчик скорости, встроенный в чип приемника GPS. Я хочу, чтобы мое приложение работало независимо от этого, поэтому я использую следующую формулу haversine:

private double CalculateHaversineMI(double lat1, double long1, double lat2,double long2) {
    double dlong = (long2 - long1) * (Math.PI / 180.0f);
    double dlat = (lat2 - lat1) * (Math.PI / 180.0f);
    double a = Math.pow(Math.sin(dlat / 2.0), 2)
        + Math.cos(lat1 * (Math.PI / 180.0f))
        * Math.cos(lat2 * (Math.PI / 180.0f))
        * Math.pow(Math.sin(dlong / 2.0), 2);
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
    double d = 3956 * c;

    return d;
}

Теперь я пытаюсь понять, как из этого рассчитать скорость. Кто-нибудь может мне помочь, пожалуйста?

Ответы [ 2 ]

3 голосов
/ 17 мая 2011

Я вижу, что ваша функция возвращает правильное расстояние пути между двумя точками на сфере - это d. Но эта формула необходима, только если у вас есть 2 точки на сфере, которые не находятся близко друг к другу (значит, центральный угол их разделения не мал, центральный угол в 1 градус соответствует расстоянию около 111 км, просто чтобы почувствовать ). Если они находятся близко друг к другу (что относится к людям, движущимся и на медленных транспортных средствах), то эта формула вам не нужна. Вы можете просто и очень точно аппроксимировать дугу на сфере прямой линией, и тогда расчет станет тривиальным.

  • Пример положения GPS в регулярные периоды времени. Рассчитайте расстояние от последней полученной позиции. Для этого вы можете использовать функцию distanceTo() из android.location.Location.
  • Рассчитать скорость путем деления расстояния на время, прошедшее между двумя измерениями.
  • Средние расчетные скорости для более точных результатов, но убедитесь, что вы не потеряете чувствительность к изменениям скорости. Таким образом, вам понадобится компромисс по количеству усредненных выборок.
0 голосов
/ 17 мая 2011

Это рассчитывает расстояние. Теперь, как вы помните, скорость = расстояние / время, поэтому где-то вдоль линии вам нужно зафиксировать время и положение.

С другой стороны, формула, которую вы используете, является способом ОТТ для того, что вы пытаетесь сделать. Вам было бы лучше сделать ряд приближений, основываясь на том факте, что путь, по которому вы идете, намного меньше окружности земли. Тогда вы могли бы прийти к гораздо более простой формуле.

...