React Native Geolocation平均速度

时间:2017-03-07 08:06:48

标签: javascript reactjs react-native geolocation

我有一个本机应用程序,我跟踪用户的位置并在地图上显示他的动作。我的目标是显示用户随身携带的平均速度。

现在在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
}

有没有办法在整个轨迹上获得平均速度?或者我该如何计算这个速度?

保持所有"速度"听起来很荒谬而且效率不高。数组中的值,然后将其除以数组中的值。

非常感谢任何帮助!

非常感谢提前!

2 个答案:

答案 0 :(得分:0)

我使用getCurrentPositionredux以及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(我正在做什么)