我有一个React Native应用程序,我在其中跟踪用户的位置并在地图上显示他的动作。我的目标是显示用户与他/她一起旅行的平均速度。
现在,在React Native的Geolocation Watchposition的响应中,这是一个速度参数,这仅是从最后已知的坐标到新坐标。
响应:
{
coords: {
accuracy: 5,
altitude: 0,
altitudeAccuracy: -1,
heading: 108.43,
latitude: 38.333034435,
longitude: -122.04128193
speed: 6.5
}
timestamp: 1465109890871.304
}
有没有办法获得整个轨迹的平均速度?还是如何计算此速度?
听起来很荒谬,并且表现不太表现,可以将所有"速度"值保留在数组中,然后将其偏向数组中的值数量。
任何帮助都非常感谢!
非常感谢!
使用getCurrentPosition
和redux
和此公式 -
var speedCounter = 0;
setInterval(() => {
navigator.geolocation.getCurrentPosition(success, error, options);
}, 1000);
function success(position) {
++speedCounter;
var speed = position.coords.speed < 0 ? 0 : Math.round(position.coords.speed);
var topSpeed = getState().data.topSpeed;
var avgSpeed = getState().data.avgSpeed;
dispatch({
type: DATA_SPEED,
speed: speed,
topSpeed: speed > topSpeed ? speed : topSpeed,
avgSpeed: Math.round((avgSpeed * (speedCounter - 1) + speed) / speedCounter),
});
}
我使用了getCurrentPosition
,因为watchPosition
对我来说效果不佳。但这是很久以前的。不确定最新版本中的watchPosition
有多准确。
为@vinayr的好的提供另一个解决方案如果准确性不够好,您可能会有GPS纬度/经度,而不是速度(就我而言,我的速度= -2),因此您可能需要其他东西。
每当您获得一些新的坐标时,您就可以使用https://stackoverflow.com/a/23448821/1611358或此NPM模块https://www.npmjs.coms.coms.com/package/使用计算方法来计算到前面的位置距离。haversine。
然后您有2个计算AVG速度的选项:
-
每当速度为负时,您都会计算它(方法高于两个坐标之间的方法 持续时间:使用时间戳),然后使用测量的NB更新AVG速度 最后AVG速度 新位置速度(如@vinayr)
-
您将两个变量的距离和持续时间添加到总数和总数中,您的AVG速度始终是总数/总数(我在做什么)