private Location NextLocation(Location origin) { var next = RandomLocation(); while (next.Name == origin.Name) { next = RandomLocation(); } return next; }
private static Route MapRoute(Location origin, Location destination, DirectionsResponse result) { var points = result.Routes.First() .Legs.SelectMany(leg => leg.Steps) .Select(step => new RouteLeg( new Position(step.StartLocation.Latitude, step.StartLocation.Longitude), new Position(step.EndLocation.Latitude, step.EndLocation.Longitude), step.Distance.Value)) .ToArray(); return new Route(origin, destination, points); }
public async Task<Route> PlanNewRoute(Location origin) { var destination = NextLocation(origin); var request = new DirectionsRequest { Origin = origin.Name, Destination = destination.Name, TravelMode = TravelMode.Driving }; return await CallGoogleService(origin, request, destination); }
private static async Task<Route> CallGoogleService(Location origin, DirectionsRequest request, Location destination) { var count = 0; while (count < 3) { try { var result = await GoogleMaps.Directions.QueryAsync(request); if (result.Status == DirectionsStatusCodes.OK) { return MapRoute(origin, destination, result); } } catch (Exception exception) { Console.WriteLine("Error while contacting the google service: " + exception.ToString()); } count ++; } throw new InvalidOperationException("Could not contact the Google service after 3 times."); }