使用路点时的最短路线

shortest route when using waypoints

本文关键字:短路 用路      更新时间:2023-09-26

我可以使用完美的路点。但我无法获得最短的方向。我尝试使用替代路线,但不起作用。我需要这样的东西:http://i58.tinypic.com/2vjbt6d.jpg

有办法吗?

我的代码

function codeAddress(adres) {
        var address = adres;  
        geocoder.geocode({ 'address': address }, function (results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                map.setCenter(results[0].geometry.location);
            }
        });
    }
    function calcRoute() {
        var grid = document.getElementById('GridView1');
        var start = document.getElementById('DropDownList_ilce').value + "," + document.getElementById('DropDownList_il').value;
        var end = document.getElementById('GridView1').rows[grid.rows.length - 1].cells[4].innerHTML + "," + document.getElementById('GridView1').rows[grid.rows.length - 1].cells[3].innerHTML;
        var waypts = [];
        for (var i = 0; i < grid.rows.length - 2; i++) {
            waypts.push({
                location: document.getElementById('GridView1').rows[i+1].cells[4].innerHTML + "," + document.getElementById('GridView1').rows[i+1].cells[3].innerHTML,
                stopover: true
            });
        }

        var request = {
            origin: start,
            destination: end,
            waypoints: waypts,
            optimizeWaypoints: true,
            travelMode: google.maps.TravelMode.DRIVING
        };
        directionsService.route(request, function (response, status) {
            if (status == google.maps.DirectionsStatus.OK) {
                directionsDisplay.setDirections(response);
            }
        });

正如我在评论中所说的,API似乎没有给出默认返回最短路由的选项参数。

这里的关键是使用provideRouteAlternatives: true作为DirectionsRequest属性:

var request = {
    origin: 'cerkeş,çankırı',
    destination: 'diyarbakır',
    travelMode: google.maps.DirectionsTravelMode.DRIVING,
    provideRouteAlternatives: true
};

对于给定的始发地和目的地,这将返回2条单独的路线。970公里和1137公里中的一个。

然后你必须计算哪条路线最短。你可以这样做:

directionsService.route(request, function (response, status) {
    if (status == google.maps.DirectionsStatus.OK) {
        var distance = null;
        var routeIndex = 0;
        // Loop through the routes to find the shortest one
        for (var i=0; i<response['routes'].length; i++) {
            var routeDistance = response['routes'][i].legs[0].distance.value;
            if (distance === null) {
                distance = routeDistance;
                routeIndex = i;
            }
            if (routeDistance < distance) {
                distance = routeDistance;
                routeIndex = i;
            }
        }
        directionsDisplay.setDirections(response);
        // Set route index
        directionsDisplay.setOptions({ 
            routeIndex: routeIndex
        });
    }
});

请注意,当您有多个路由时,关键是设置要显示的路由的索引。

// Set route index
directionsDisplay.setOptions({
    routeIndex: routeIndex
});

此示例不使用路点。我相信,如果你使用路点,你最终会得到多个DirectionsLeg腿。在这种情况下,您将不得不进行更多的计算,将每条腿的距离相加,以找到总路线距离。

希望这能有所帮助!