从一分钟内获得的经度和纬度值的集合计算速度?

时间:2017-10-31 04:47:00

标签: java android google-maps distance

我需要在每10秒或更短的时间后计算速度(目前我使用融合位置api来获取每10秒后的位置)。问题是设备太慢,有时候距离覆盖等于零。

我尝试过使用Location.distanceBetween(),但即使设备移动也会产生零。我试图通过公式计算距离,但有时距离太小而得不到。

现在我想计算平均速度。我想保存1分钟内获得的点数(6个纬度值)。然后在每10秒后,我想计算它们之间的平均速度。因此,在每10秒后,我将在末尾添加一个点并从开始移除一个点。这将消除零的可能性。

现在有任何公式可以计算一组lat长值的速度或距离,或者任何更好的方法都将受到高度赞赏。

3 个答案:

答案 0 :(得分:2)

您可以使用简单几何

计算两点之间的距离,这两点距离足够近
leaf

而增量是弧度,deltaLngMeters = R * cos(latitude) * deltaLongitudeRadians; deltaLatMeters = R * deltaLatitudeRadians;

因此deltaLatitudeRadians = deltaLatitudeDegrees * pi / 180

总结

distance = sqrt(deltaLngMeters ^2 + deltaLatMeters ^ 2)

如果您有六个点的数组,则可以计算平均速度。

function distance(point1, point2) {
    var degToRad = Math.PI / 180;
    return R * degToRad * Math.sqrt(Math.pow(Math.cos(point1.lat * degToRad ) * (point1.lng - point2.lng) , 2) + Math.pow(point1.lat - point2.lat, 2));
}

是的,points = [{lat: .., lng: ..}, ... ]; // 6 points distancesSum = 0; for(i = 0; i < distances.length - 1; i++) { distancesSum += distance(points[i], points[i + 1]); } return (distancesSum / (points.length - 1)); 适用于地球半径,R

答案 1 :(得分:0)

您可以使用多线程(Thread.sleep())每10秒重复计算一个公式。您可以在https://beginnersbook.com/2013/03/multithreading-in-java/验证它。

答案 2 :(得分:0)

对于小距离(希望设备不会以高于1 km / s的速度移动),地球表面可以被视为一个平面。然后,纬度和经度将是笛卡尔平面上的设备与地球的坐标。因此,您可以通过以下公式计算距离:

√(delta(longitude)^2 + delta(latitude)^2)

delta:差异