我有一个本机应用程序,我跟踪用户的位置并在地图上显示他的动作。我的目标是显示用户随身携带的平均速度。
现在在React Native的地理位置watchPosition的响应是一个速度参数,这只是从最后已知的坐标到新坐标。
响应:
{
coords: {
accuracy: 5,
altitude: 0,
altitudeAccuracy: -1,
heading: 108.43,
latitude: 38.333034435,
longitude: -122.04128193
speed: 6.5
}
timestamp: 1465109890871.304
}
有没有办法在整个轨迹上获得平均速度?或者我该如何计算这个速度?
保持所有"速度"听起来很荒谬而且效率不高。数组中的值,然后将其除以数组中的值。
非常感谢任何帮助!
非常感谢提前!
答案 0 :(得分:0)
我使用getCurrentPosition
和redux
以及this公式执行此操作的方式 -
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
的准确度。
答案 1 :(得分:0)
为@vinayr的好人提供另一种解决方案 如果准确度不够好,你可能有GPS纬度/经度而不是速度(在我的情况下我有速度= -2)所以你可能需要别的东西,而不仅仅是速度。
每当您获得一些新坐标时,您可以使用https://stackoverflow.com/a/23448821/1611358或此npm模块https://www.npmjs.com/package/haversine中的calculateDistance方法计算到上一个位置的距离。
然后你有2个选项来计算平均速度:
每当速度为负时,你计算它(使用上面的方法+两个坐标之间的持续时间:使用时间戳),然后使用nb of measures + last avg speed + new position speed更新你的avg Speed(由@vinayr)
你在两个变量totalDistance和totalDuration中追加距离和持续时间,你的平均速度总是totalDistance / totalDuration(我正在做什么)