Javascript 如何在谷歌地图中获取lat和lng的总距离

Javascript 如何在谷歌地图中获取lat和lng的总距离,javascript,google-maps,Javascript,Google Maps,我每5-7秒将gps信号保存到数据库中。当我对数据库中的所有lat和lng值进行“求和”时,如何才能看到我迄今为止走过的距离。我怎样才能每天看到这些资源 比如说。当我在实时预览中跟踪汽车时,我希望有一段距离作为当天的实时数据计算。例如,当我寻找某辆卡车的月公里数时 我正在查看链接,但我不知道如何动态填充数据,因为数组中已有数据 如果你已经实现了同样的东西,你能给我一些想法和例子吗 如果车轮已经制造,为什么要制造它:) 谢谢你一些三角学会让你达到目的 我希望Lat/Lng像2D表面上的X/Y坐标一

我每5-7秒将gps信号保存到数据库中。当我对数据库中的所有lat和lng值进行“求和”时,如何才能看到我迄今为止走过的距离。我怎样才能每天看到这些资源

比如说。当我在实时预览中跟踪汽车时,我希望有一段距离作为当天的实时数据计算。例如,当我寻找某辆卡车的月公里数时

我正在查看链接,但我不知道如何动态填充数据,因为数组中已有数据

如果你已经实现了同样的东西,你能给我一些想法和例子吗

如果车轮已经制造,为什么要制造它:)


谢谢你

一些三角学会让你达到目的

我希望Lat/Lng像2D表面上的X/Y坐标一样简单。不幸的是,由于我们生活在一个称为地球的(非常奇妙的)球体上,纬度和经度指的是三角形相对于地球中心(纬度)的角度或我们在地球上绘制的假想线(经度),但这不是重点

我用哈弗森公式计算了球体上的距离,如果你愿意的话,你可以这样做

为了简单起见,我只在这里发布代码。我是用Javascript编写的,这就是您得到的:)给定两个lat/lng点A和B,然后:

// units can be english (miles) or metric (km)
var units = "english";
function calculate_distance(a, b) {
  var R = (units == "english") ? 3958.7558 : 6371; 

  var dLat = (a.lat - b.lat) * Math.PI / 180;
  var dLon = (a.lng - b.lng) * Math.PI / 180;
  var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
          Math.cos(a.lat * Math.PI / 180) * Math.cos(b.lat * Math.PI / 180) * 
          Math.sin(dLon / 2) * Math.sin(dLon / 2); 
  var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); 
  return R * c;
}
如果在两个点之间迭代应用此函数,并将距离求和。。。宾果

function get_distance(list_of_points) {
  if (list_of_points.length == 0) return 0;

  var sum = 0;
  var last_point = list_of_points.shift();
  while (list_of_points.length > 0) {
    var next_point = list_of_points.shift();
    sum += calculate_distance(last_point, next_point);
    last_point = next_point; 
  }

  return sum;
}

或者,您可以使用Google Maps API的几何体库执行相同的操作:

<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?libraries=geometry&sensor=false"></script>
<script type="text/javascript">

  function initialize() {
    var myLatLng = new google.maps.LatLng(0, -180);
    var myOptions = {
      zoom: 3,
      center: myLatLng,
      mapTypeId: google.maps.MapTypeId.TERRAIN
    };

    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

    var coordinates = [
        new google.maps.LatLng(37.772323, -122.214897),
        new google.maps.LatLng(21.291982, -157.821856),
        new google.maps.LatLng(-18.142599, 178.431),
        new google.maps.LatLng(-27.46758, 153.027892)
    ];
    console.log(google.maps.geometry.spherical.computeLength(coordinates));


  }
</script>

函数初始化(){
var mylatng=new google.maps.LatLng(0,-180);
变量myOptions={
缩放:3,
中心:myLatLng,
mapTypeId:google.maps.mapTypeId.TERRAIN
};
var map=new google.maps.map(document.getElementById(“map_canvas”),myOptions);
变量坐标=[
新google.maps.LatLng(37.772323,-122.214897),
新google.maps.LatLng(21.291982,-157.821856),
新google.maps.LatLng(-18.142599178.431),
新google.maps.LatLng(-27.46758153.027892)
];
log(google.maps.geometry.spheremic.computeLength(坐标));
}

我必须说,我从来没有这样看待lat和lng。是的,我需要的是对一组lat和lng求和。继续,添加了一个函数来对一系列点的距离求和:)做得好Andy:)还有一件事。。。如果我想获得度量值(km),我需要更改的是,在尝试执行代码时,word
sperical
出现了一些错误。这是可行的。如何指定区域以公里为单位?结果以米为单位,所以只需除以1000即可