示例#1
0
        public TNodeCarpooling AddNodeCarpooling(long id, Point Coordinates, string StopId, string StopName)
        {
            TNodeCarpooling N = new TNodeCarpooling(id, Coordinates, StopId, "", StopName, 0);

            TNodesCarpooling.Add(id, N);

            return(N);
        }
示例#2
0
        /*
         * Add connection for the carpooling network based on PT stops
         */
        public TConnectionForCarpooling AddConnectionForCarpoolingRides(TNodeCarpooling src, TNodeCarpooling dst)
        {
            TConnectionForCarpooling C = new TConnectionForCarpooling(__MaxArcID, src, dst);

            src.Connections.Add(C);
            Connections.Add(__MaxArcID, C);
            TConnectionsForCarpoolingRides.Add(__MaxArcID, C);
            ++(__MaxArcID);
            return(C);
        }
示例#3
0
        public TConnectionForCarpooling AreConnected(TNodeCarpooling src, TNodeCarpooling dst, string routeID)
        {
            TConnectionForCarpooling TC = TConnectionsForCarpoolingRides.Values.Where(x => x.GetSource().Id == src.Id && x.GetDestination().Id == dst.Id).FirstOrDefault();

            if (TC == null)
            {
                double distanceFromSource = src.Point.DistanceFrom(dst.Point);
                this.AddConnectionForCarpoolingRides(src, dst);
                TC = TConnectionsForCarpoolingRides.Values.Where(x => x.GetSource().Id == src.Id && x.GetDestination().Id == dst.Id).FirstOrDefault();
                log.Warn("Not connected, added connection from \"" + src.StopName + "\" to \"" + dst.StopName + "\" (distance: " + distanceFromSource + "m)");
            }

            return(TC);
        }
示例#4
0
        public List <TNodeCarpooling> findClosestStop(Point startPoint)
        {
            List <TNodeCarpooling> PTnodes = new List <TNodeCarpooling>();

            foreach (KeyValuePair <long, TNodeCarpooling> node in TNodesCarpooling)
            {
                double          distance = startPoint.DistanceFrom(node.Value.Point);
                TNodeCarpooling PTnode   = new TNodeCarpooling(node.Value.Id, node.Value.Point, node.Value.StopId, node.Value.StopCode, node.Value.StopName, distance, node.Key);
                PTnodes.Add(PTnode);
            }

            PTnodes = PTnodes.OrderBy(x => x.distanceFromStartnode).ToList();

            return(PTnodes);
        }
示例#5
0
        /*
         * Matching function for the carpooling rides
         */
        public List <TNodeCarpooling> MatchTNodeCarpooling()
        {
            int i = 0;

            try
            {
                for (i = 0; i < Points.Count - 1; ++i)
                {
                    SocialCar.RoutePlanner.Routing.Nodes.Point StartPoint =
                        new SocialCar.RoutePlanner.Routing.Nodes.Point(Points[i].Latitude, Points[i].Longitude);
                    SocialCar.RoutePlanner.Routing.Nodes.Point FinishPoint =
                        new SocialCar.RoutePlanner.Routing.Nodes.Point(Points[i + 1].Latitude, Points[i + 1].Longitude);

                    DateTime StartingTime = DateTime.Now;
                    int      StartingTimeSinceMidnight = Globals.ConvertTimeToSeconds(StartingTime.ToString("HH:mm:ss"));

                    float delta = 0.1f;

                    TNodeCarpooling        StartNode      = null;
                    TNodeCarpooling        TargetNode     = null;
                    List <TNodeCarpooling> StartNodeList  = new List <TNodeCarpooling> {
                    };
                    List <TNodeCarpooling> TargetNodeList = new List <TNodeCarpooling> {
                    };
                    StartNodeList  = RoadNetwork.ResolvePointTNode(StartPoint, delta);
                    TargetNodeList = RoadNetwork.ResolvePointTNode(FinishPoint, delta);

                    if (StartNodeList.Count() > 0)
                    {
                        StartNode = StartNodeList.First();
                    }
                    if (TargetNodeList.Count() > 0)
                    {
                        TargetNode = TargetNodeList.First();
                    }

                    if ((StartNode != null) && (TargetNode != null))
                    {
                        Router X = new Router(StartNode, TargetNode, string.Empty, StartingTimeSinceMidnight, TravelMode.Carpool, ObjFunction.Distance);
                        X.Start();

                        if (X.Solution.Count() > 0)
                        {
                            foreach (Connection C in X.Solution)
                            {
                                MatchingSolutionTNodeCarpooling.AddLast((TNodeCarpooling)C.GetSource());
                            }
                            MatchingSolutionTNodeCarpooling.AddLast((TNodeCarpooling)X.Solution.Last().GetDestination());
                        }
                    }
                    else
                    {
                        throw new Exception("Carpooling StartNode or EndNode are null");
                    }
                }

                //Init();
                //RunDijkstra();
                //CheckConnectivity();
            }
            catch (Exception ex)
            {
                log.Error("ERROR: " + ex.Message);
                if (ex.InnerException != null)
                {
                    log.Error("ERROR: " + ex.InnerException.Message);
                }
                log.Error("ERROR: " + ex.StackTrace);
            }

            return(MatchingSolutionTNodeCarpooling.ToList().Where(x => x != null).Distinct().ToList());
        }