从2点计算速度

时间:2011-05-17 05:45:26

标签: android performance gps distance haversine

我知道这个问题已被问到很多,但还不令我满意。我正在尝试使用Android设备的GPS来计算速度。许多人似乎回答说只是使用Location对象的getSpeed()函数。根据我的理解,getSpeed()仅适用于在GPS接收器芯片中内置速度传感器的某些设备。我希望我的应用程序无论如何都能正常工作,因此我使用以下hasrsine公式:

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 个答案:

答案 0 :(得分:3)

我能看到的是你的函数返回球体上2个点之间的正确路径距离 - 它是d。但是,只有当球体上有2个点彼此不相近时才需要这个公式(意味着它们的分离中心角不小,1度的中心角对应于大约111 km的距离,只是为了感觉)。如果它们彼此靠近(人们移动和慢速车辆的情况),那么你不需要这个公式。您可以使用直线简单而非常准确地近似球体上的圆弧,然后计算变得微不足道。

  • 定期拍摄GPS位置。计算距离上次获得的位置的距离。为此,您可以使用distanceTo()中的android.location.Location函数。
  • 通过将距离除以2次测量之间经过的时间来计算速度。
  • 平均计算速度可获得更准确的结果,但请确保您不会失去对速度变化的敏感度。因此,您需要对平均样本数进行一些权衡。

答案 1 :(得分:0)

计算距离。现在您可能还记得,速度=距离/时间,因此您需要捕捉时间和位置。

另一方面,您正在使用的公式是OTT,用于您要做的事情。根据您穿越的路径远小于地球周长这一事实,您最好能够进行多次近似。那么你可以得到一个更简单的公式。