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); }
/* * 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); }
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); }
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); }
/* * 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()); }