【问题标题】:Get shortest distance between two points [duplicate]获取两点之间的最短距离[重复]
【发布时间】:2017-06-20 09:49:27
【问题描述】:

我需要计算两点之间的最短距离。我正在使用下面的函数来实现这一点。

var p1 = new google.maps.LatLng(6.71532762,80.06215197);
var p2 = new google.maps.LatLng(6.93234287,79.84870747);

var distance = document.getElementById('distance');
distance.innerHTML = distance.innerHTML+calcDistance(p1, p2);

//calculates distance between two points in km's
function calcDistance(p1, p2) {
  return (google.maps.geometry.spherical.computeDistanceBetween(p1, p2) / 1000).toFixed(2);  
} 

这给出了 33.77 公里 作为距离。但是根据google maps,以上两点之间最短的距离应该是45.0公里

我怎样才能得到那个值? (45.0 公里

这里是jsfiddle link

【问题讨论】:

  • 请注意,您调用的方法是“google.maps.geometry.spherical .computeDistanceBetween”,我怀疑这是两点之间的大圆距离(即最短全球距离)。
  • 我自己在谷歌地图中测量了距离,结果得到了 ~33.7 公里。编辑:我想你从路上的距离得到了 45 公里。如果您想通过道路测量距离,这不是您正在寻找的功能。 See this link for that
  • 计算球面距离!= 通过道路行驶的距离。请说明您需要什么。

标签: javascript angularjs google-maps google-maps-api-3


【解决方案1】:

球面距离是从 a - b 直线上的距离(如鸟飞)

您发布的谷歌地图链接显示了一条 45 公里长的街道。

编辑:要获得最短的街道距离,您需要查看谷歌地图方向 API 而不是球形方法: https://developers.google.com/maps/documentation/directions/intro

【讨论】:

【解决方案2】:

要获取道路距离,可以使用 google.maps.DirectionsService() :

var p1 = new google.maps.LatLng(6.71532762, 80.06215197);
var p2 = new google.maps.LatLng(6.93234287, 79.84870747);

function getShortestDistance(p1, p2) {
  return new Promise(function(resolve, reject) {
    var request = {
      origin: p1,
      destination: p2,
      travelMode: google.maps.TravelMode.DRIVING,
      provideRouteAlternatives: true
    };
    new google.maps.DirectionsService().route(request, function(response, status) {
      var minRoute = null;
      for (var i = 0; i < response.routes.length; i++) {
        if (minRoute === null || response.routes[i].legs[0].distance.value < minRoute.legs[0].distance.value) {
          minRoute = response.routes[i];
        }
      }
      resolve(minRoute);
    });
  });
}

getShortestDistance(p1, p2).then(function(result) {
  document.getElementById('distance').innerHTML = 'Distance : ' +     result.legs[0].distance.text;
});

你可以在这里找到图书馆:https://maps.google.com/maps/api/js?sensor=false&libraries=geometry

【讨论】:

  • 感谢您的回答。但这给出了最快的路线。但我需要的是最短路线
  • 那我觉得你可以在请求中添加provideRouteAlternatives: true 来获取备选路线,选择最短的。
  • 是的,刚刚发现。谢谢
  • 我编辑了我的答案以找到最短的路线。我正在跑 45 公里,这是你所期望的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-15
  • 1970-01-01
  • 2011-02-18
  • 1970-01-01
  • 1970-01-01
  • 2018-03-01
相关资源
最近更新 更多