首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在google地图中获取lat和lng总距离

如何在google地图中获取lat和lng总距离
EN

Stack Overflow用户
提问于 2012-06-04 05:11:49
回答 2查看 520关注 0票数 1

我保存gps信号每5-7秒到数据库。当我将数据库中的所有lat和lng值“相加”时,我如何才能看到我已经走了多远。我怎么才能看到每天的结果呢?

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

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

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

如果已经制造了轮子,为什么还要制造轮子:)

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-04 07:00:00

或者,您也可以使用Google Maps API的Geometry Library来做同样的事情:

代码语言:javascript
运行
复制
<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>
票数 1
EN

Stack Overflow用户

发布于 2012-06-04 05:28:40

一些三角函数会带你到那里。

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

我已经使用哈弗正弦公式来计算球体上的距离,如果你愿意,你可以使用read more about

为了简单起见,我只在这里发布代码。我是用Javascript编写的,所以这就是你得到的结果:)给出两个经纬点A和B,然后:

代码语言:javascript
运行
复制
// 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;
}

如果您在点对之间迭代应用此函数,并将距离相加...对啰。

代码语言:javascript
运行
复制
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;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10873984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档