Beispiel #1
0
        public void SplitSelfLoops_GpxSharpTShape_ShouldSplitIt()
        {
            var gpxLine = new LineString(new[]
            {
                new Coordinate(0, 0),
                new Coordinate(100, 0),
                new Coordinate(200, 0),
                new Coordinate(300, 0),
                new Coordinate(300, 300),
                new Coordinate(301, 0),
                new Coordinate(400, 0),
                new Coordinate(600, 0)
            });

            var results = _executor.SplitSelfLoops(gpxLine, 30);

            Assert.AreEqual(2, results.Count);
            Assert.AreEqual(4, results.First().Coordinates.Length);
            Assert.AreEqual(4, results.Last().Coordinates.Length);
        }
Beispiel #2
0
        private List <LineString> SplitSelfLoopsAndRemoveDuplication(List <LineString> missingLines)
        {
            var missingLinesWithoutLoops = new List <LineString>();

            foreach (var missingLine in missingLines)
            {
                missingLinesWithoutLoops.AddRange(_gpxLoopsSplitterExecutor.SplitSelfLoops(missingLine, _options.MinimalDistanceToClosestPoint));
            }
            missingLinesWithoutLoops.Reverse(); // remove duplications set higher priority to lines that were recorded later
            var missingLinesWithoutLoopsAndDuplications = new List <LineString>();

            foreach (var missingLineWithoutLoops in missingLinesWithoutLoops)
            {
                var linesToAdd = _gpxLoopsSplitterExecutor.GetMissingLines(missingLineWithoutLoops,
                                                                           missingLinesWithoutLoopsAndDuplications.ToArray(),
                                                                           _options.MinimalMissingSelfLoopPartLegth,
                                                                           _options.MinimalDistanceToClosestPoint);
                linesToAdd.Reverse();
                missingLinesWithoutLoopsAndDuplications.AddRange(linesToAdd);
            }
            missingLinesWithoutLoopsAndDuplications.Reverse(); // reverse back to keep the original order of the lines
            return(missingLinesWithoutLoopsAndDuplications);
        }