【问题标题】:How to find Google Map API Shortest route as Shown in Google map Route如何找到 Google Map API 中显示的 Google Map Route 最短路线
【发布时间】:2019-12-10 08:58:45
【问题描述】:

我在获得最短路线时遇到了麻烦。 问题是谷歌地图中显示的距离与 google.maps.DirectionsService(); 获得的最短路线之间存在差异;我也得到了替代路线,但仍然与地图上的距离显示不匹配.. enter image description here

地图中显示的距离是 15 公里,但 google.maps.DirectionsService() 的最短路线是 18.3 公里 我想获得地图中显示的距离,如我附上的图片所示。 代码...

       directionsService.route(request, function(response, status) {
           if (status === 'OK') {
               let route_options = [];
               for (var i = 0; i < response.routes.length; i++)
               {
                   let route = response.routes[i];
                   let distance = 0;
                   // Total the legs to find the overall journey distance for each route option
                   for (var j = 0; j < route.legs.length; j++)
                   {
                       distance += route.legs[j].distance.value; // metres
                   }
                   route_options.push({
                       'route_id': i,
                       'distance': distance
                   });
               }
               route_options.sort(function(a, b) {
                   return parseInt(a.distance) - parseInt(b.distance);
               });
               let duration = response.routes[0].legs[0].duration.value;
               let shortest_distance = (route_options[0]['distance'] * 0.001); // convert metres to kilometres


              return shortest_distance;
           }
       });
   }

【问题讨论】:

  • 向我们展示您的代码,除非我们能为您提供帮助。

标签: javascript google-maps directions google-directions-api map-api


【解决方案1】:

您的代码实现中的其他地方可能存在您尚未发布的问题,因为您共享的代码返回的距离与 Google 地图所返回的距离相同。

请查看基于 Google 的 examplejsfiddle 进行演示。请按以下步骤操作:
1. 选择“Frankfurt Airport (FRA) (FRA), Frankfurt, Germany”作为出发地
2. 选择“德国法兰克福汉堡大道法兰克福万豪酒店”作为目的地
3.选择“驾驶”模式

控制台输出:

distance.text: 15.0 km
distance.value: 14.988
shortest_distance: 14.988

相关代码如下:

  function(response, status) {
    if (status === 'OK') {
      let route_options = [];
      for (var i = 0; i < response.routes.length; i++) {
        let route = response.routes[i];
        let distance = 0;
        // Total the legs to find the overall journey distance for each route option
        for (var j = 0; j < route.legs.length; j++) {
          distance += route.legs[j].distance.value; // metres
        }
        route_options.push({
          'route_id': i,
          'distance': distance
        });
      }
      route_options.sort(function(a, b) {
        return parseInt(a.distance) - parseInt(b.distance);
      });
      let duration = response.routes[0].legs[0].duration.value;
      let shortest_distance = (route_options[0]['distance'] * 0.001); // convert metres to kilometres

      console.log("distance.text: " + response.routes[0].legs[0].distance.text);
      console.log("distance.value: " + response.routes[0].legs[0].distance.value * 0.001);
      console.log("shortest_distance: " + shortest_distance);

      me.directionsRenderer.setDirections(response);
    } else {
      window.alert('Directions request failed due to ' + status);
    }
  });

希望这会有所帮助!

【讨论】: