如何在谷歌地图中获取与纬度和液化天然气的总距离

How to get total distance from lat and lng in google maps

本文关键字:天然气 距离 纬度 谷歌地图 获取      更新时间:2023-09-26

我每 5-7 秒将 gps sigal 保存到数据库中。当我从数据库"求和"所有纬度和 lng 值时,我如何查看到目前为止我走了多少距离。我怎样才能每天看到这些反应?

例如。当我在实时预览中跟踪汽车时,我希望有一个距离来求和当天的实时数据。当我为某辆卡车寻找例如一个月公里时?

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

如果您已经实现了同样的事情,您能否给我一些想法和示例。

如果轮子已经制成:),为什么要制作轮子

谢谢

一些三角学会让你到达那里。

我希望纬度/液化曲线像 2D 表面上的 X/Y 坐标一样简单。不幸的是,由于我们生活在一个叫做地球的(非常奇妙的)球体上,纬度和经度是指三角形相对于地心(纬度)的角度或我们在地球上绘制的假想线(经度)。历史的东西很整洁,但这不是这里的重点。

我使用Haversine forumla来计算球体上的距离,如果您愿意,可以阅读更多内容。

为了简单起见,我将在此处发布代码。我是用Javascript写的,所以这就是你得到的:)给定两个纬度/液化天然气点 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>