Exemplo n.º 1
0
        /* TConnection */
        public override double GetTravelTime(string date, double arrivalTime, TravelMode Mode)
        {
            double time         = 0;
            double trafficDelay = 0;

            if (!CanBeTraversedUsingMode(Mode))
            {
                return(double.PositiveInfinity);
            }

            if (Mode.HasFlag(Routing.TravelMode.Bus))
            {
                List <TimeTableEntry> Trips = TimeTable.GetFeasibleTrips(arrivalTime);

                if (Trips.Count == 0)
                {
                    return(double.PositiveInfinity);
                }

                TimeTableEntry Trip = Trips.First();

                /* The "false" condition is added only for TEST A, in order to ignore the feed validity !!!REMEMBER TO REMOVE FOR TEST C!!! */
                if (/*(false) &&*/ (!Trip.IsValidDate(date)))
                {
                    return(double.PositiveInfinity);
                }
                else
                {
                    time = (Trip.DestinationArrivalTime - Trip.SourceDepartureTime);

                    /* For Bus, the time is traffic dependent */
                    if ((TrafficReport != null) && (TimeTable.Entries.First().RouteType == RouteType.Bus))
                    {
                        double minDistanceFromTraffic;
                        minDistanceFromTraffic = Math.Min(this.TrafficDistanceFromSource, this.TrafficDistanceFromDestination);
                        trafficDelay           = addTrafficDelay(time, minDistanceFromTraffic, TrafficReport);
                    }

                    /* Waiting time */
                    WaitingTime = (Trip.SourceDepartureTime - arrivalTime);

                    time += WaitingTime + trafficDelay;

                    DepartureTime     = Trip.SourceDepartureTime;
                    ArrivalTime       = Trip.SourceArrivalTime;
                    DestArrivalTime   = Trip.DestinationArrivalTime;
                    DestDepartureTime = Trip.DestinationDepartureTime;

                    if (time < 0 || WaitingTime < 0)
                    {
                        throw new Exception("negative time value");
                    }
                }
            }
            else
            {
                time = double.PositiveInfinity;
            }


            return(time);
        }