Exemple #1
0
        private int GetRouteHash(RouteSegment[] route)
        {
            RouteSegment firstSegment = route.First();
            RouteSegment lastSegment  = route.Last();

            return(firstSegment.Line.Id.GetHashCode() ^ firstSegment.DateFrom.Ticks.GetHashCode() ^ lastSegment.Line.Id.GetHashCode() ^ lastSegment.DateTo.Ticks.GetHashCode());
        }
Exemple #2
0
        public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
        {
            RouteSegmentViewHolder viewHolder = holder as RouteSegmentViewHolder;
            RouteSegment           segment    = routeSegments[position];

            viewHolder.StopIcon.SetImageBitmap(Utils.GetStopIconForLine(viewHolder.StopIcon.Context, segment.Line));
            viewHolder.LineIcon.SetImageDrawable(segment.Line.GetIconDrawable(viewHolder.StopIcon.Context));
            viewHolder.LineBar.SetBackgroundColor(Utils.GetColorForLine(viewHolder.StopIcon.Context, segment.Line));
            viewHolder.StopName.Text = segment.From.Stop.Name;
            viewHolder.Date.Text     = segment.DateFrom.ToString("HH:mm");

            viewHolder.StopList.SetLayoutManager(new WrapLayoutManager(viewHolder.StopList));
            viewHolder.StopList.SetAdapter(new RouteSegmentStopAdapter(segment));
            viewHolder.StopList.NestedScrollingEnabled = false;

            if (!viewHolders.Contains(viewHolder))
            {
                viewHolders.Add(viewHolder);
            }
        }
Exemple #3
0
        public IEnumerable <RouteSegment[]> SimulateTimeStepsFrom(RouteLink[] route, DateTime date, TimeSpan lowerTolerance, TimeSpan upperTolerance)
        {
            RouteLink[] changes = route.Distinct(l => l.Line).ToArray();
            RouteLink   last    = route.Last();

            if (route.Any(l => l.To.Route.TimeTable == null))
            {
                yield break;
            }

            RouteLink firstLink = route.First();
            //Step firstStep = firstLink.Line?.Routes?.SelectMany(r => r.Steps)?.First(s => s.Stop.Name == firstLink.From && s.Next?.Stop?.Name == firstLink.To.Stop.Name);
            Step firstStep = firstLink.To.Route.Steps.First(s => s.Stop.Name == firstLink.From && s.Next?.Stop?.Name == firstLink.To.Stop.Name);

            // Setup simulation
            DateTime simulationDate = date;
            DateTime lowerBound     = simulationDate - lowerTolerance;
            DateTime upperBound     = simulationDate + upperTolerance;

            TimeStep[] timeSteps = firstStep.Route.TimeTable.GetStepsFromStep(firstStep, lowerBound).Take(3).ToArray();

            TimeStep        lastTimeStep;
            List <TimeStep> segmentTimeSteps;

            foreach (TimeStep timeStep in timeSteps)
            {
                List <RouteSegment> segments = new List <RouteSegment>();
                RouteSegment        segment;

                lastTimeStep   = timeStep;
                simulationDate = lastTimeStep.Date;

                Step lastStep = firstStep;
                foreach (RouteLink change in changes.Skip(1))
                {
                    segment = new RouteSegment()
                    {
                        From = lastStep, DateFrom = lastTimeStep.Date, Line = lastStep.Route.Line
                    };
                    segments.Add(segment);

                    segmentTimeSteps = new List <TimeStep>();

                    while (lastStep.Stop.Name != change.From)
                    {
                        segmentTimeSteps.Add(lastTimeStep);

                        lastStep     = lastStep.Next;
                        lastTimeStep = lastStep.Route.TimeTable.GetStepsFromStep(lastStep, simulationDate).FirstOrDefault();

                        simulationDate = lastTimeStep.Date;
                    }

                    segment.TimeSteps = segmentTimeSteps.ToArray();
                    segment.To        = lastStep;
                    segment.DateTo    = simulationDate;

                    //lastStep = change.Line?.Routes?.SelectMany(r => r.Steps)?.First(s => s.Stop.Name == change.From && s.Next?.Stop?.Name == change.To.Stop.Name);
                    lastStep     = change.To.Route.Steps.First(s => s.Stop.Name == change.From && s.Next?.Stop?.Name == change.To.Stop.Name);
                    lastTimeStep = lastStep.Route.TimeTable.GetStepsFromStep(lastStep, simulationDate).FirstOrDefault();

                    if (lastTimeStep == null)
                    {
                        yield break;
                    }

                    simulationDate = lastTimeStep.Date;
                }

                segment = new RouteSegment()
                {
                    From = lastStep, DateFrom = lastTimeStep.Date, Line = lastStep.Route.Line
                };
                segments.Add(segment);

                segmentTimeSteps = new List <TimeStep>();

                while (lastStep.Stop.Name != last.To.Stop.Name)
                {
                    segmentTimeSteps.Add(lastTimeStep);

                    lastStep     = lastStep.Next;
                    lastTimeStep = lastStep.Route.TimeTable.GetStepsFromStep(lastStep, simulationDate).FirstOrDefault();

                    simulationDate = lastTimeStep.Date;
                }

                segment.TimeSteps = segmentTimeSteps.ToArray();
                segment.To        = lastStep;
                segment.DateTo    = simulationDate;

                yield return(segments.ToArray());
            }
        }
Exemple #4
0
 public RouteSegmentStopAdapter(RouteSegment routeSegment)
 {
     this.routeSegment = routeSegment;
 }