public void ExtendHotRoutes(ref HotRoute r) { var p = r.Segments.Last(); //Console.WriteLine("P: " + p.Id); var q = p.GetDirectlyTrafficDensityReachableNeighbors(minTraffic, eps); //Console.WriteLine("Q: " + q.ToList().Count); if (q.Any()) { foreach (var split in q) { //Console.WriteLine("SPLIT ID: " + split.Id); if (IsRouteTrafficDensityReachable(r, split)) { if (!r.Segments.Contains(split)) { r.Segments.Add(split); ExtendHotRoutes(ref r); } else { return; } } } } }
public HashSet <HotRoute> Run(RoadGraph roadGraph, int eps, int minTraffic) { this.eps = eps; this.minTraffic = minTraffic; this.roadGraph = roadGraph; hotRoutes = new HashSet <HotRoute>(); hotRouteStarts = new HashSet <Connection>(); //var test = roadGraph.Connections.Where(c => c.Traffic.Count() >= minTraffic); //Console.WriteLine(test.ToList().Count); this.aStart = new AstarPathfinder(this.roadGraph); FindHotRouteStarts(); Console.WriteLine("Return FindHotRouteStars(): " + hotRouteStarts.Count); foreach (var hrs in hotRouteStarts) { var r = new HotRoute(hrs); ExtendHotRoutes(ref r); hotRoutes.Add(r); } return(hotRoutes); }
public bool IsRouteTrafficDensityReachable(HotRoute r, Connection split) { Connection last = r.Segments.Last(); double len = Calculations.GetDistance2D(last.From.MapPoint, split.To.MapPoint); CandidatePoint from = new CandidatePoint(); from.MapPoint = last.From.MapPoint; from.Road = last.Geometry; CandidatePoint to = new CandidatePoint(); to.MapPoint = split.To.MapPoint; to.Road = split.Geometry; IList <PathSegment> result = this.aStart.FindPath(from, to, ref len); if (result.Count <= eps) { return(true); } return(false); }