public void ConnectLayrsCreatesConnectionsAmongPoints()
        {
            CandidatesGraph target = new CandidatesGraph();

            CandidatePoint pt11 = new CandidatePoint() { MapPoint = new PointGeo() { Latitude = 1, Longitude = 1 } };
            CandidatePoint pt21 = new CandidatePoint() { MapPoint = new PointGeo() { Latitude = 2.1, Longitude = 2.1} };
            CandidatePoint pt22 = new CandidatePoint() { MapPoint = new PointGeo() { Latitude = 2.2, Longitude = 2.2} };

            CandidateGraphLayer layer1 = new CandidateGraphLayer();
            layer1.Candidates.Add(pt11);
            target.Layers.Add(layer1);

            CandidateGraphLayer layer2 = new CandidateGraphLayer();
            layer2.Candidates.AddRange(new CandidatePoint[] { pt21, pt22 });
            target.Layers.Add(layer2);

            target.ConnectLayers();

            Assert.Equal(0, target.Layers[0].Candidates[0].IncomingConnections.Count);
            Assert.Equal(1, target.Layers[0].Candidates[0].OutgoingConnections.Where(c => c.From == pt11 && c.To == pt21).Count());
            Assert.Equal(1, target.Layers[0].Candidates[0].OutgoingConnections.Where(c => c.From == pt11 && c.To == pt22).Count());

            Assert.Equal(0, target.Layers[1].Candidates[0].OutgoingConnections.Count);
            Assert.Equal(0, target.Layers[1].Candidates[1].OutgoingConnections.Count);

            Assert.Equal(1, target.Layers[1].Candidates[0].IncomingConnections.Where(c => c.From == pt11 && c.To == pt21).Count());
            Assert.Equal(1, target.Layers[1].Candidates[1].IncomingConnections.Where(c => c.From == pt11 && c.To == pt22).Count());
        }
Esempio n. 2
0
        /// <summary>
        /// Matches the given GPX track to the map
        /// </summary>
        /// <param name="gpx">The GPS track log</param>
        /// <returns>List of the CandidatePoints that match GPS log the best</returns>
        public IList <CandidatePoint> Match(GPXTrackSegment gpx)
        {
            _candidatesGraph = new CandidatesGraph();

            CreateTrackCutout(gpx);

            //Find candidate points + ObservationProbability
            foreach (var gpxPoint in gpx.Nodes)
            {
                var candidates = FindCandidatePoints(gpxPoint);

                _candidatesGraph.CreateLayer(gpxPoint, candidates.OrderByDescending(c => c.ObservationProbability).Take(Math.Min(candidates.Count(), STMatching.MaxCandidatesCount)));
            }

            // Calculate transmission probability
            _candidatesGraph.ConnectLayers();
            AssignTransmissionProbability();

            //Evaluates paths in the graph
            EvaluateGraph();

            //Extract result
            List <CandidatePoint> result  = new List <CandidatePoint>();
            CandidatePoint        current = _candidatesGraph.Layers[_candidatesGraph.Layers.Count - 1].Candidates.OrderByDescending(c => c.HighestProbability).FirstOrDefault();

            while (current != null)
            {
                result.Add(current);
                current = current.HighesScoreParent;
            }

            result.Reverse();
            return(result);
        }
        public void CreateLayerAddsLayerIntoGraph()
        {
            CandidatesGraph target = new CandidatesGraph();

            GPXPoint originalPt = new GPXPoint(1, 1.1);
            CandidatePoint pt1 = new CandidatePoint() { MapPoint = new PointGeo() { Latitude = 1, Longitude = 1 } };
            CandidatePoint pt2 = new CandidatePoint() { MapPoint = new PointGeo() { Latitude = 2.1, Longitude = 2.1 } };

            target.CreateLayer(originalPt, new CandidatePoint[] { pt1, pt2 });

            Assert.Equal(1, target.Layers.Count);
            Assert.Equal(2, target.Layers[0].Candidates.Count);
        }
Esempio n. 4
0
        /// <summary>
        /// Matches the given GPX track to the map
        /// </summary>
        /// <param name="gpx">The GPS track log</param>
        /// <returns>List of the CandidatePoints that match GPS log the best</returns>
        public IList<CandidatePoint> Match(GPXTrackSegment gpx)
        {
            _candidatesGraph = new CandidatesGraph();

            CreateTrackCutout(gpx);

            //Find candidate points + ObservationProbability
            foreach (var gpxPoint in gpx.Nodes) {
                var candidates = FindCandidatePoints(gpxPoint);

                _candidatesGraph.CreateLayer(gpxPoint, candidates.OrderByDescending(c => c.ObservationProbability).Take(Math.Min(candidates.Count(), STMatching.MaxCandidatesCount)));
            }

            // Calculate transmission probability
            _candidatesGraph.ConnectLayers();
            AssignTransmissionProbability();

            //Evaluates paths in the graph
            EvaluateGraph();

            //Extract result
            List<CandidatePoint> result = new List<CandidatePoint>();
            CandidatePoint current = _candidatesGraph.Layers[_candidatesGraph.Layers.Count - 1].Candidates.OrderByDescending(c => c.HighestProbability).FirstOrDefault();

            while (current != null) {
                result.Add(current);
                current = current.HighesScoreParent;
            }

            result.Reverse();
            return result;
        }
        public void ConstructorInitializesProperties()
        {
            CandidatesGraph target = new CandidatesGraph();

            Assert.NotNull(target.Layers);
        }