コード例 #1
0
        public void Setup()
        {
            this.DataDirPath = Path.GetFullPath(Path.Combine(Directory.GetCurrentDirectory(), "../../../../../../../../../", "data"));

            var spatial = new GeographySpatialOperation();
            var roads   = this.ReadRoads(spatial);

            var mapBuilder = new RoadMapBuilder(spatial);

            _roadMap = mapBuilder.AddRoads(roads).Build();

            {
                var naiveDijkstraRouter = new DijkstraRouter <Road, RoadPoint>();
                _naiveDijkstraMatcher = new Matcher <MatcherCandidate, MatcherTransition, MatcherSample>(
                    _roadMap, naiveDijkstraRouter, Costs.TimePriorityCost, spatial);
                _naiveDijkstraMatcher.MaxDistance = MaxDistance;  // set maximum searching distance between two GPS points to 1000 meters.
                _naiveDijkstraMatcher.MaxRadius   = MaxGpsRadius; // sets maximum radius for candidate selection to 200 meters
            }

            {
                var precomputedDijkstraRouter = new PrecomputedDijkstraRouter <Road, RoadPoint>(_roadMap, Costs.TimePriorityCost, Costs.DistanceCost, MaxDistance);
                _precomputedDijkstraMatcher = new Matcher <MatcherCandidate, MatcherTransition, MatcherSample>(
                    _roadMap, precomputedDijkstraRouter, Costs.TimePriorityCost, spatial);
                _precomputedDijkstraMatcher.MaxDistance = MaxDistance;  // set maximum searching distance between two GPS points to 1000 meters.
                _precomputedDijkstraMatcher.MaxRadius   = MaxGpsRadius; // sets maximum radius for candidate selection to 200 meters
            }

            _samples = ReadSamples().OrderBy(s => s.Time).ToArray();
        }
コード例 #2
0
        FindPaths(
            RoadPoint source, IEnumerable <RoadPoint> targets,
            Func <Road, double> cost, Func <Road, double> bound, double maxRadius)
        {
            var dijkstraRouter    = new DijkstraRouter <Road, RoadPoint>();
            var precomputedRouter = new PrecomputedDijkstraRouter <Road, RoadPoint>(_map, cost, bound, maxRadius);
            var expectedPath      = dijkstraRouter.Route(source, targets, cost, bound, maxRadius);
            var actualPath        = precomputedRouter.Route(source, targets, cost, bound, maxRadius);

            return(expectedPath, actualPath);
        }
コード例 #3
0
        public void SelfLoopTest1()
        {
            var max     = 200D;
            var start   = new RoadPoint(_map.GetEdge(0), 0.3);
            var targets = new RoadPoint[] {
                new RoadPoint(_map.GetEdge(0), 0.2),
            };
            Func <Road, double> cost = r => r.Weight;

            var dijkstraRouter    = new DijkstraRouter <Road, RoadPoint>();
            var precomputedRouter = new PrecomputedDijkstraRouter <Road, RoadPoint>(_map, cost, cost, max);

            var expectedPath = dijkstraRouter.Route(start, targets, cost, cost, max);
            var actualPath   = precomputedRouter.Route(start, targets, cost, cost, max);

            Assert.Equal(expectedPath, actualPath);
        }