public void OnRouteCalculated(object sender, BingRouteCalculatedEventArgs e) { SearchBoundingBox box = e.CalculationResult.RouteResults[0].BoundingBox; GeoPoint topleft = new GeoPoint { Latitude = box.NorthLatitude, Longitude = box.WestLongitude, }; GeoPoint bottomRight = new GeoPoint { Latitude = box.SouthLatitude, Longitude = box.EastLongitude, }; //Add devpress.map.core.dll mapControl1.ZoomToRegion(topleft, bottomRight, 0.4); RouteCalculationResult result = e.CalculationResult; if ((result.RouteResults != null) & (result.ResultCode == RequestResultCode.Success)) { for (int rnum = 0; rnum < e.CalculationResult.RouteResults.Count; rnum++) { if (e.CalculationResult.RouteResults[rnum].Legs != null) { //int legNum = 1; foreach (BingRouteLeg leg in e.CalculationResult.RouteResults[rnum].Legs) { list.Add(float.Parse(leg.Distance.ToString("0.00"))); } } } } }
public TaskResponse(RouteCalculationResult routeCalcResult) { routeResult = new Route(); routeResult.mode = routeCalcResult.Mode.ToString(); routeResult.totalLength = routeCalcResult.TotalLength; routeResult.totalTime = routeCalcResult.TotalTime; routeResult.checkpoints = routeCalcResult.Checkpoints.Select(cp => new Checkpoint(cp)).ToList(); }
private void routeDataProvider_RouteCalculated(object sender, BingRouteCalculatedEventArgs e) { RouteCalculationResult result = e.CalculationResult; StringBuilder resultList = new StringBuilder(); resultList.Append(String.Format("Status: {0}\n", result.ResultCode)); resultList.Append(String.Format("Fault reason: {0}\n", result.FaultReason)); resultList.Append(ProcessIntermediatePoints(result.IntermediatePoints)); resultList.Append(ProcessRouteResults(result.RouteResults)); tbResults.Text = resultList.ToString(); }
private void OnRouteCalculated(object sender, BingRouteCalculatedEventArgs e) { RouteCalculationResult result = e.CalculationResult; if ((result.RouteResults == null) || (result.ResultCode == RequestResultCode.BadRequest)) { rtbResults.Text = "The Bing Route service does not work for this location."; return; } StringBuilder resultList = new StringBuilder(""); if (result.IntermediatePoints != null) { resultList.Append(String.Format("_________________________\n")); for (int i = 0; i < e.CalculationResult.IntermediatePoints.Count; i++) { resultList.Append( String.Format("Starting point {0}: {1} ({2})\n", i + 1, e.CalculationResult.IntermediatePoints[i].Description, e.CalculationResult.IntermediatePoints[i].Location) ); } } if ((result.RouteResults != null) & (result.ResultCode == RequestResultCode.Success)) { for (int rnum = 0; rnum < e.CalculationResult.RouteResults.Count; rnum++) { resultList.Append(String.Format("_________________________\n")); resultList.Append(String.Format("Path {0}:\n", rnum + 1)); resultList.Append(String.Format( "Distance: {0}\n", e.CalculationResult.RouteResults[rnum].Distance )); resultList.Append(String.Format( "Time: {0}\n", e.CalculationResult.RouteResults[0].Time )); if (e.CalculationResult.RouteResults[rnum].Legs != null) { int legNum = 1; foreach (BingRouteLeg leg in e.CalculationResult.RouteResults[rnum].Legs) { resultList.Append(String.Format("\tLeg {0}:\n", legNum++)); resultList.Append(String.Format("\tDistance: {0}\n", leg.Distance)); resultList.Append(String.Format("\tTime: {0}\n", leg.Time)); if (leg.Itinerary != null) { foreach (BingItineraryItem itineraryItem in leg.Itinerary) { resultList.Append(String.Format(itineraryItem.Maneuver + "\n")); resultList.Append(String.Format( "\t\tLocation: {0}\n", itineraryItem.Location )); } } } } } } rtbResults.Text = resultList.ToString(); }
private static void CalculateRoute(long routeCalculationId) { try { #region Prepare var dbSession = SessionFactory.Instance.OpenSession(); var routeCalculation = dbSession.Get <RouteCalculation>(routeCalculationId); var santas = dbSession.Query <Santa>().OrderBy(s => s.Id).ToList(); var visits = dbSession.Query <Visit>() .Where(v => v.Year == routeCalculation.Year && v.Id != routeCalculation.StarterVisitId) .OrderBy(v => v.Id) .ToList(); visits.ForEach(v => v.Duration = 60 * (v.NumberOfChildren * routeCalculation.TimePerChildMinutes + routeCalculation.TimePerChildOffsetMinutes)); var startVisit = dbSession.Query <Visit>().First(v => v.Id == routeCalculation.StarterVisitId); routeCalculation.NumberOfSantas = santas.Count; routeCalculation.NumberOfVisits = visits.Count; var converter = new PersistenceToCoreConverter(); var optimizationInput = converter.Convert(routeCalculation.Days, startVisit, visits, santas); // remove unnecessary santas { // maximum number of additional santas to reach the theoretical optimum var maxAdditional = optimizationInput.NumberOfVisits() - optimizationInput.NumberOfSantas(); maxAdditional = Math.Max(0, maxAdditional); routeCalculation.MaxNumberOfAdditionalSantas = Math.Min(routeCalculation.MaxNumberOfAdditionalSantas, maxAdditional); } routeCalculation.State = RouteCalculationState.Ready; var solverConfig = SolverConfigFactory.CreateSolverConfig(routeCalculation, optimizationInput); routeCalculation.AlgorithmData = JsonConvert.SerializeObject(solverConfig); dbSession.Update(routeCalculation); dbSession.Flush(); #endregion Prepare #region Run routeCalculation.StartTime = DateTime.Now; var solver = SolverFactory.CreateSolver(optimizationInput, solverConfig); // note: Progress<> is not suitable here as it may use multiple threads var consoleProgress = new EventHandler <string>((s, m) => { OnConsoleProgressOnProgressChanged(s, m, routeCalculationId); }); var progress = new EventHandler <ProgressReport>((s, report) => { OnProgressOnProgressChanged(s, report, routeCalculationId); }); routeCalculation.State = RouteCalculationState.Running; dbSession.Update(routeCalculation); dbSession.Flush(); var optimizationResult = solver.Solve(routeCalculation.TimeLimitMiliseconds, progress, consoleProgress); // refresh session as changes where made in other sessions (progress) dbSession.Clear(); routeCalculation = dbSession.Get <RouteCalculation>(routeCalculation.Id); var routeCalculationResult = new RouteCalculationResult { OptimizationResult = optimizationResult, VisitMap = converter.VisitMap, SantaMap = converter.SantaMap, ZeroTime = converter.ZeroTime }; routeCalculation.Result = JsonConvert.SerializeObject(routeCalculationResult); routeCalculation.State = RouteCalculationState.Finished; #endregion Run routeCalculation.EndTime = DateTime.Now; dbSession.Update(routeCalculation); dbSession.Flush(); } catch (Exception e) { var dbSession = SessionFactory.Instance.OpenSession(); var routeCalculation = dbSession.Get <RouteCalculation>(routeCalculationId); routeCalculation.State = RouteCalculationState.Cancelled; routeCalculation.StateText.Add(new RouteCalculationLog { Log = $"Error: {e.Message}" }); dbSession.Update(routeCalculation); dbSession.Flush(); } }