Пример #1
0
        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;
                        }
                    }
                }
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }