/// <summary>
        /// Builds a route along all the given point in the order given by the tsp solution.
        /// </summary>
        /// <returns></returns>
        public Route BuildRoute(Vehicle vehicle, RouterPoint[] resolved, GeoCoordinate[] coordinates, OsmSharp.Logistics.Routes.IRoute tspSolution, bool isRound)
        {
            // sort resolved and coordinates.
            var solution = tspSolution.ToArray();
            var size = isRound ? solution.Length + 1 : solution.Length;
            var sortedResolved = new RouterPoint[size];
            var sortedCoordinates = new GeoCoordinate[size];
            for (int idx = 0; idx < solution.Length; idx++)
            {
                sortedResolved[idx] = resolved[solution[idx]];
                sortedCoordinates[idx] = coordinates[solution[idx]];
            }

            // make round if needed.
            if (isRound)
            {
                sortedResolved[size - 1] = sortedResolved[0];
                sortedCoordinates[size - 1] = sortedCoordinates[0];
            }

            // build the route.
            return this.BuildRoute(vehicle, sortedResolved, sortedCoordinates);
        }