Расчет скорости от 2 точек

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

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;
}

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


person Icemanind    schedule 17.05.2011    source источник


Ответы (2)


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

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

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

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

person Philip Sheard    schedule 17.05.2011