How to return" waypoint order " in Google Directions API?

I am developing a system to trace route using Google Maps API.

I have the points of origin and destination and between these points there are some points of interest. When plotting the Route Google returns me the best route and mark these points on the map. I display the route data in a div.

My function that calculates the route, the part that returns the data looks like this:

directionsService.route(request, $.proxy(function(response, status){

  if (status == google.maps.DirectionsStatus.OK) {

    directionsDisplay.setDirections(response);
    var orders = response.routes[0].waypoint_order; 
    var route = response.routes[0];
    var total_distance = 0;
    var displayRoute = $('#detail-route');

    for (i = 0; i < route.legs.length; i++){

      var routeSegment = i + 1,
      from_address = route.legs[i].start_address.split(','),
      to_address = route.legs[i].end_address.split(',');
      total_distance += Math.floor(route.legs[i].distance.value / 1000);

      displayRoute.append('<b>Trecho ' + routeSegment + ': </b><br/>');
      displayRoute.append('<b>Saindo de: </b>' + from_address[0] + '<br/>');
      displayRoute.append('<b>Indo para: </b>' + to_address[0] + '<br/>');
      displayRoute.append('<b>Distância: </b>' + route.legs[i].distance.text);
    }

    displayRoute.prepend('total:' + this.format(total_distance) + ' km' + '<br/><br/>');

function format() it's my function to format km.

O problem is that on some routes waypoint_order shows a different order.

For example:

For a given route, the route.legs[i] returns Order:

waypoint 0, 1 waypoint, waypoint 3, waypoint 2

But returns waypoint_orderattribute [3, 0, 2, 1, 3].

Question

Is this the expected behavior, or is something missing?

Author: Comunidade, 2014-01-29

1 answers

I imagine you have put the optimizeWaypoints: true, taken from the documentation itself of the Google Directions API :

waypoint_order contains an array indicating the order of any waypoints in the calculated route. This waypoints may be reordered if the request was passed optimize:true within {waypoints parameter.

In free translation:

waypoints_order contains a vector indicating the order of all waypoints within the calculated route. These waypoints can be re-regenerated if passed optimize:true in the request, next to the parameter waypoints.

That is, if you want to optimize the route, the path points may have their route rearranged and, perhaps because of this, the order in route.legs is different from the order in waypoints.

 3
Author: Felipe Avelar, 2014-01-29 12:57:35