我需要在每10秒或更短的时间后计算速度(目前我使用融合位置api来获取每10秒后的位置)。问题是设备太慢,有时候距离覆盖等于零。
我尝试过使用Location.distanceBetween(),但即使设备移动也会产生零。我试图通过公式计算距离,但有时距离太小而得不到。
现在我想计算平均速度。我想保存1分钟内获得的点数(6个纬度值)。然后在每10秒后,我想计算它们之间的平均速度。因此,在每10秒后,我将在末尾添加一个点并从开始移除一个点。这将消除零的可能性。
现在有任何公式可以计算一组lat长值的速度或距离,或者任何更好的方法都将受到高度赞赏。
答案 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:差异