예제 #1
0
        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);
        }
예제 #2
0
        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.";
            }
        }