private List <PointItem> GetFromRouteModel(Router.Model.RouteModel routeModel) { var result = new List <PointItem>(); PointItem startItem = new PointItem() { Name = $"1. {this.UserInputData.StartingPoint}", Location = new Location(routeModel.Waypoints[0].location[1], routeModel.Waypoints[0].location[0]), BackgroundColor = "LightGreen" }; PointItem endItem = new PointItem() { Name = $"{routeModel.Waypoints.Length}. {this.UserInputData.EndingPoint}", Location = new Location(routeModel.Waypoints[routeModel.Waypoints.Length - 1].location[1], routeModel.Waypoints[routeModel.Waypoints.Length - 1].location[0]), BackgroundColor = "LightGreen" }; result.Add(startItem); result.Add(endItem); for (int i = 1; i < routeModel.Waypoints.Length - 1; i++) { int waypointIndex = routeModel.Waypoints[i].waypoint_index; PointItem pointItem = new PointItem() { Name = $"{++waypointIndex}.", Location = new Location(routeModel.Waypoints[i].location[1], routeModel.Waypoints[i].location[0]), BackgroundColor = "LightGreen" }; result.Add(pointItem); } return(result); }
private void CalculateRouteExecute() { try { // TODO: this one line below does not seem to work this.UserInputData.ProcessingTime = "During processing"; var watch = new Stopwatch(); watch.Start(); this.Polylines.Clear(); var startingPosition = Router.APIHelpers.NominatimAPIHelper.GetPositionForAddress(this.UserInputData.StartingPoint); var endingPosition = Router.APIHelpers.NominatimAPIHelper.GetPositionForAddress(this.UserInputData.EndingPoint); double additionalTime = double.Parse(this.UserInputData.AdditionalTimeMin) * 60; double additionalDistance = double.Parse(this.UserInputData.AdditionalDistanceKm) * 1000; var router = new Router.RouterOptimalBruteForce(startingPosition, endingPosition, additionalDistance, additionalTime); Router.Model.RouteModel route = router.GetRoute(this.UserInputData.UseAggregatedPoints); Polyline polyline = this.GetFromMultiPoint(route.MultiPoint, "Blue", 6); this.Polylines.Add(polyline); this.UserInputData.ResultDistanceKm = (route.Distance / 1000).ToString(); this.UserInputData.ResultTimeHMin = GetHoursMinutesFromSeconds(route.Time); this.UserInputData.ResultAdditionalStops = (route.Waypoints.Length - 2).ToString(); Router.Model.RouteModel referenceRoute = router.ReferenceRoute; Polyline polylineReference = this.GetFromMultiPoint(referenceRoute.MultiPoint, "Red", 3); this.Polylines.Add(polylineReference); this.UserInputData.ReferenceDistanceKm = (referenceRoute.Distance / 1000).ToString(); this.UserInputData.ReferenceTimeHMin = GetHoursMinutesFromSeconds(referenceRoute.Time); List <PointItem> pointItemsRoute = this.GetFromRouteModel(route); this.PushpinsRoute.Clear(); foreach (var pointItem in pointItemsRoute) { this.PushpinsRoute.Add(pointItem); } watch.Stop(); this.UserInputData.ProcessingTime = $"{watch.Elapsed.Minutes} min {watch.Elapsed.Seconds} sec"; } catch (Exception) { this.UserInputData.ProcessingTime = "Wystąpił błąd. Spróbuj ponownie."; } }