Google Directions API return different waypoint_order and legs

google-maps, google-maps-api-3, javascript, jquery

Solution

Is an expected behaivour since:

If optimizeWaypoints was set to true, this field will contain the re-ordered permutation of the input waypoints. For example, if the input was: Origin: Los Angeles Waypoints: Dallas, Bangor, Phoenix Destination: New York and the optimized output was ordered as follows: Origin: Los Angeles Waypoints: Phoenix, Dallas, Bangor Destination: New York then this field will be an Array containing the values [2, 0, 1]. Note that the numbering of waypoints is zero-based. If any of the input waypoints has stopover set to false, this field will be empty, since route optimization is not available for such queries.

As stated here: DirectionsResult

The waypoint_order is the optimized order

Problem

I'm 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 waypoints. By tracing the route Google returns me the best route and mark these points on the map. We 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()` is my function for format km.. The problem is that, on some routes, the `waypoint_order` shows a different order than the one in `legs`. For example: For a given route, the `route.legs[i]` returns order: 'waypoint 0, waypoint 1, waypoint 3, waypoint 2', but the `waypoint_order`attribute returns [3, 0, 2, 1, 3] Is this the expected behavior, or am i missing something here?

Original source