从 2 点计算速度
Posted
技术标签:
【中文标题】从 2 点计算速度【英文标题】:Calculating speed from 2 points 【发布时间】:2011-05-17 05:45:26 【问题描述】:我知道这个问题被问了很多,但还没有让我满意。我正在尝试使用 android 设备的 GPS 来计算速度。很多人的回答似乎是简单地使用 Location 对象的 getSpeed() 函数。但据我了解,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;
现在我要做的是弄清楚如何从中计算速度。谁能帮帮我?
【问题讨论】:
【参考方案1】:我可以看到您的函数返回球体上 2 点之间的正确路径距离 - 它是 d
。但是,这个公式只有当你在一个球面上有两个不靠近的点时才需要(意味着它们分离的中心角不小,1度的中心角对应于大约111公里的距离,只是为了感受)。如果它们彼此靠近(人们移动和慢速车辆就是这种情况),那么您不需要这个公式。您可以简单且非常准确地用直线在球体上近似圆弧,然后计算就变得简单了。
android.location.Location
的distanceTo()
函数。
通过将距离除以两次测量之间经过的时间来计算速度。
平均计算速度以获得更准确的结果,但确保您不会失去对速度变化的敏感性。因此,您需要在平均样本数量上进行一些权衡。
【讨论】:
【参考方案2】:计算距离。现在您可能还记得,速度 = 距离 / 时间,因此您需要沿线的某处捕捉时间和位置。
另一方面,您使用的公式对于您正在尝试做的事情来说是 OTT 方式。您最好根据您正在穿越的路径远小于地球周长这一事实进行一些近似。然后你可以得出一个更简单的公式。
【讨论】:
以上是关于从 2 点计算速度的主要内容,如果未能解决你的问题,请参考以下文章