使用Geolocation API javascript计算我的速度

时间:2015-07-16 13:54:20

标签: javascript android performance cordova geolocation

有可能计算移动设备移动通过Google Maps javascript for android的地理定位的速度吗?

1 个答案:

答案 0 :(得分:1)

至少如果您使用Geolocation plugin提供的原生地理定位服务,您可以获得足够准确的位置,您可以根据该位置计算速度

function calculateSpeed(t1, lat1, lng1, t2, lat2, lng2) {
  // From Caspar Kleijne's answer starts
  /** Converts numeric degrees to radians */
  if (typeof(Number.prototype.toRad) === "undefined") {
    Number.prototype.toRad = function() {
      return this * Math.PI / 180;
    }
  }
  // From Caspar Kleijne's answer ends
  // From cletus' answer starts
  var R = 6371; // km
  var dLat = (lat2-lat1).toRad();
  var dLon = (lon2-lon1).toRad();
  var lat1 = lat1.toRad();
  var lat2 = lat2.toRad();

  var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
    Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) *    Math.cos(lat2); 
  var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
  var distance = R * c;
  // From cletus' answer ends

  return distance / t2 - t1;
}

function firstGeolocationSuccess(position1) {
  var t1 = Date.now();
  navigator.geolocation.getCurrentPosition(
    function (position2) {
      var speed = calculateSpeed(t1 / 1000, position1.coords.latitude, position1.coords.longitude, Date.now() / 1000, position2.coords.latitude, position2.coords.longitude);
    }
}
navigator.geolocation.getCurrentPosition(firstGeolocationSuccess);

Number toRad 函数来自Caspar Kleijne's answer,两个坐标之间的距离计算来自cletus' answer,< em> t2 和 t1 处于,纬度(lat1&amp; lat2)和经度(lng1&amp; lng2)为浮点数。

代码中的主要思想如下: 1.获取该位置的初始位置和存储时间, 2.获取另一个位置,获取后,使用位置和时间调用 calculateSpeed 函数。

当然,相同的公式适用于Google Maps情况,但在这种情况下,我会检查计算的准确性,因为即使网络滞后也可能导致一些测量错误,如果时间间隔太短,则会轻易成倍增加。