Javascript 获取两点之间的最短距离

Javascript 获取两点之间的最短距离,javascript,angularjs,google-maps,google-maps-api-3,Javascript,Angularjs,Google Maps,Google Maps Api 3,我需要计算两点之间的最短距离。我使用下面的函数来实现这一点 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(

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

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 km作为距离。但根据的规定,上述各点之间的最短距离应为45.0km

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


这是球面距离。

球面距离是从a到b的直线距离(当鸟飞行时)

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

编辑:要获得最短的街道距离,您需要查看google maps directions API,而不是球形方法:
球形距离是从a到b的直线距离(鸟类飞行时)

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

编辑:要获得最短的街道距离,您需要查看google maps directions API,而不是球形方法:

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

var p1=new google.maps.LatLng(6.71532762,80.06215197);
var p2=新的google.maps.LatLng(6.93234287,79.84870747);
函数getShortestDistance(p1、p2){
返回新承诺(功能(解决、拒绝){
var请求={
来源:p1,
目的地:p2,
travelMode:google.maps.travelMode.DRIVING,
ProviderRouteAlternatives:true
};
新建google.maps.DirectionsService().route(请求、函数(响应、状态){
var minRoute=null;
对于(var i=0;i

您可以在此处找到该库:

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

var p1=new google.maps.LatLng(6.71532762,80.06215197);
var p2=新的google.maps.LatLng(6.93234287,79.84870747);
函数getShortestDistance(p1、p2){
返回新承诺(功能(解决、拒绝){
var请求={
来源:p1,
目的地:p2,
travelMode:google.maps.travelMode.DRIVING,
ProviderRouteAlternatives:true
};
新建google.maps.DirectionsService().route(请求、函数(响应、状态){
var minRoute=null;
对于(var i=0;i


您可以在这里找到图书馆:

谢谢您的澄清。是的,我需要知道那条街45公里长的距离。然后你应该看看谷歌地图方向API:谢谢你的文档链接。我查一下。谢谢你的澄清。是的,我需要知道那条街45公里长的距离。然后你应该看看谷歌地图方向API:谢谢你的文档链接。我将对此进行检查。请注意,您调用的方法是“google.maps.geometry.spheremic.ComputedIstanceBeween”,我怀疑这是两点之间的大圆距离(即全球最短距离)。我自己在谷歌地图中测量了距离,结果得到了约33.7公里。编辑:我想你得到了距离公路45公里的距离。如果你想通过公路测量距离,这不是你想要的功能。计算球面距离!=通过道路行驶的距离。请指定您需要的。请注意,您调用的方法是“google.maps.geometry.spherec.ComputedDistanceBeween”,我怀疑这是两点之间的大圆距离(即全球最短距离)。我自己在谷歌地图上测量了距离,结果得到了约33.7公里。编辑:我想你得到了距离公路45公里的距离。如果你想通过公路测量距离,这不是你想要的功能。计算球面距离!=通过道路行驶的距离。请详细说明您需要什么。谢谢您的回答。但这是最快的路线。但是我需要的是最短的路线。我想你可以在请求中添加ProviderRouteAlternatives:true,以获得备选路线并选择最短的路线。是的,刚刚找到了。谢谢我编辑了我的答案以找到最短的路线。我要跑45公里,这是你所期望的。谢谢你的回答。但这是最快的路线。但是我需要的是最短的路线。我想你可以在请求中添加ProviderRouteAlternatives:true,以获得备选路线并选择最短的路线。是的,刚刚找到了。谢谢我编辑了我的答案以找到最短的路线。我跑了45公里,这是你所期望的。
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;
});