我知道这个问题已被问到很多,但还不令我满意。我正在尝试使用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;
}
现在我要做的是弄清楚如何从中计算速度。有人可以帮帮我吗?
答案 0 :(得分:3)
我能看到的是你的函数返回球体上2个点之间的正确路径距离 - 它是d
。但是,只有当球体上有2个点彼此不相近时才需要这个公式(意味着它们的分离中心角不小,1度的中心角对应于大约111 km的距离,只是为了感觉)。如果它们彼此靠近(人们移动和慢速车辆的情况),那么你不需要这个公式。您可以使用直线简单而非常准确地近似球体上的圆弧,然后计算变得微不足道。
distanceTo()
中的android.location.Location
函数。 答案 1 :(得分:0)
计算距离。现在您可能还记得,速度=距离/时间,因此您需要捕捉时间和位置。
另一方面,您正在使用的公式是OTT,用于您要做的事情。根据您穿越的路径远小于地球周长这一事实,您最好能够进行多次近似。那么你可以得到一个更简单的公式。