Exemple #1
0
        static void Main(string[] args)
        {
            //var reader = new GeoJsonFileReader();
            //var data = reader.Read(".\\routedata.geojson");


            //var a = new A();
            //a.title = "A";

            //var b = new A();
            //b.title = "b";

            //a.Friends.Add(b);
            //b.Friends.Add(a);

            // Save(data, "data.txt");

            var watch = System.Diagnostics.Stopwatch.StartNew();
            // the code that you want to measure comes here
            var reader = new GeoJsonFileReader();

            var data = reader.Read(".\\routedata.geojson");


            watch.Stop();
            var elapsedMs = watch.ElapsedMilliseconds;

            Save(data, "data.txt");
            //var dsf = Read("data.txt");
        }
Exemple #2
0
        private Route MergeTwoRoutes(Route route1, Route route2)
        {
            var data = new RouteData()
            {
                Type = route1.Data.Type
            };
            var info = new RouteInfo()
            {
                Length = route1.Info.Length + route2.Info.Length
            };

            var result = new Route()
            {
                Data = data,
                Info = info
            };

            var coordinates = new List <double[]>();

            if (Enumerable.SequenceEqual(route1.Data.Coordinates.Last(), route2.Data.Coordinates.First()))
            {
                coordinates.AddRange(route1.Data.Coordinates);
                coordinates.AddRange(route2.Data.Coordinates);
            }
            else if (Enumerable.SequenceEqual(route1.Data.Coordinates.Last(), route2.Data.Coordinates.Last()))
            {
                coordinates.AddRange(route2.Data.Coordinates);
                coordinates.Reverse();
                coordinates.InsertRange(0, route1.Data.Coordinates);
            }
            else if (Enumerable.SequenceEqual(route1.Data.Coordinates.First(), route2.Data.Coordinates.First()))
            {
                coordinates.AddRange(route1.Data.Coordinates);
                coordinates.Reverse();
                coordinates.AddRange(route2.Data.Coordinates);
            }
            else if (Enumerable.SequenceEqual(route1.Data.Coordinates.First(), route2.Data.Coordinates.Last()))
            {
                coordinates.AddRange(route2.Data.Coordinates);
                coordinates.AddRange(route1.Data.Coordinates);
            }


            else
            {
                coordinates.AddRange(route1.Data.Coordinates);

                route2.Data.Coordinates = route2.Data.Coordinates.Reverse().ToArray();

                for (int i = 0; i < route2.Data.Coordinates.Length; i++)
                {
                    if (coordinates.Any(x => Enumerable.SequenceEqual(x, route2.Data.Coordinates[i])))
                    {
                        continue;
                    }

                    route2.Data.Coordinates = route2.Data.Coordinates.Skip(i == 0? 0 : i - 1).ToArray();


                    return(MergeTwoRoutes(route1, route2));
                }
            }


            result.Data.Coordinates = coordinates.ToArray();
            result.Info.Length      = Math.Round(GeoJsonFileReader.CalculateLength(result.Data.Coordinates), 2);
            return(result);
        }