コード例 #1
0
ファイル: Program.cs プロジェクト: iboware/drone-delivery
        static async Task Main(string[] args)
        {
            DistanceService dst = new DistanceService();

            // Add drone depots
            await dst.AddDepot("Depot1", "Metrostrasse 12, 40235 Düsseldorf");

            await dst.AddDepot("Depot2", "Ludenberger Str. 1, 40629 Düsseldorf");

            // Add stores
            await dst.AddStore("Store1", "Willstätterstraße 24, 40549 Düsseldorf");

            await dst.AddStore("Store2", "Bilker Allee 128, 40217 Düsseldorf");

            await dst.AddStore("Store3", "Hammer Landstraße 113, 41460 Neuss");

            await dst.AddStore("Store4", "Gladbacher Str. 471, 41460 Neuss");

            await dst.AddStore("Store5", "Lise-Meitner-Straße 1, 40878 Ratingen");

            //C1
            DeliveryPlan plan1 = await dst.Calculate("Friedrichstraße 133, 40217 Düsseldorf");

            PrintPlan(plan1);

            //C2
            DeliveryPlan plan2 = await dst.Calculate("Fischerstraße 23, 40477 Düsseldorf");

            PrintPlan(plan2);

            //C3
            DeliveryPlan plan3 = await dst.Calculate("Wildenbruchstraße 2, 40545 Düsseldorf");

            PrintPlan(plan3);

            //C4
            DeliveryPlan plan4 = await dst.Calculate("Reisholzer Str. 48, 40231 Düsseldorf");

            PrintPlan(plan4);
        }
コード例 #2
0
        public void ShouldNotFail_OnCalculate_IfValidCalculatorExists()
        {
            // arrange
            var calculator1 = new DistanceFailureCalculatorStub();
            var calculator2 = new DistanceSuccessCalculatorStub();
            var unitService = new UnitServiceStub();
            var service     = new DistanceService(new IDistanceCalculator[] { calculator1, calculator2 }, unitService);
            var c1          = new Coordinate {
                Longitude = 0, Latitude = 0
            };
            var c2 = new Coordinate {
                Longitude = 1, Latitude = 1
            };

            // act
            var value = service.Calculate(c1, c2);

            // assert
            Assert.NotNull(value);
            Assert.Equal(Units.Meters, value.Units);
            Assert.Equal(10, value.Value);
        }
コード例 #3
0
 public DroneDeliveryController(ILogger <DroneDeliveryController> logger, DistanceService distanceService)
 {
     _logger          = logger;
     _distanceService = distanceService;
 }
コード例 #4
0
ファイル: Program.cs プロジェクト: mikkelkaas/PathFinder
        private static void Main(string[] args)
        {
            var routesToGenerate       = 5000; //The bigger the number, the closer to the desired distance the routes will be.
            var targetDistanceInMeters = 3000; //How long should the routes be from Homebase, to checkpoints and back to Homebase again
            var routesToFind           = 40;   //How many routes should be found?
            var checkpointsPerRoute    = 5;    //Checkpoints per route
            var cps = GetCheckpoints();
            var checkpointsetidcounter = 1;
            var homebase = new Checkpoint(56.435056, 12.838587, "Homebase", true);

            if (routesToGenerate < routesToFind)
            {
                routesToFind = routesToGenerate;
            }

            _distanceService = new DistanceService(cps, homebase);
            Console.WriteLine($"Made {_distanceService.Calculations} calculations");
            List <Route> finalRoutes = new List <Route>();

            for (int i = 0; i < routesToFind; i++)
            {
                if (_distanceService.Checkpoints.Count(cp => cp.IsHomeBase == false) < checkpointsPerRoute)
                {
                    _distanceService.Checkpoints = GetCheckpoints();
                }
                var orderedRoutes = GenerateRoutes(routesToGenerate, checkpointsPerRoute).OrderBy(r => r.TotalDistance).ToList();
                var indexResult   = orderedRoutes.BinarySearch(new Route(new List <Checkpoint>(), targetDistanceInMeters),
                                                               new RouteComparer());
                if (indexResult < 0)
                {
                    indexResult = ~indexResult;
                }
                var foundRoute = GetBestRoute(orderedRoutes, indexResult);
                foreach (var checkpoint in foundRoute.Checkpoints.Where(cp => cp.IsHomeBase != true))
                {
                    var itemToRemove = _distanceService.Checkpoints.Single(r => r.Id == checkpoint.Id);
                    _distanceService.Checkpoints.Remove(itemToRemove);
                }
                //PrintRoute(foundRoute);
                finalRoutes.Add(foundRoute);
            }



            //var finalRoutes = GetRoutes(orderedRoutes, indexResult, routesToFind);
            var checkpointCounts = finalRoutes.SelectMany(p => p.Checkpoints).Where(c => c.IsHomeBase == false).Select(c => c.Id).GroupBy(item => item).Select(group => new
            {
                group.Key,
                Count = group.Count()
            }).OrderByDescending(g => g.Count);

            for (int i = 0; i < finalRoutes.Count; i = i + 2)
            {
                PrintRouteSiriusTwo(finalRoutes[i], finalRoutes[i + 1]);
            }
            //foreach (var route in finalRoutes)
            //    PrintRouteSirius(route);

            Console.WriteLine("Checkpoints used");
            foreach (var checkpointCount in checkpointCounts)
            {
                Console.WriteLine($"{checkpointCount.Key}: {checkpointCount.Count}");
            }
            Console.WriteLine($"Used {checkpointCounts.Count()} checkpoints of a total {cps.Count}");
            Console.ReadKey();
        }
コード例 #5
0
        /// <summary>
        /// Get the distance in miles with another airport
        /// </summary>
        /// <param name="airport">Remote airport</param>
        /// <returns>Distance in miles</returns>
        public Double GetDistance(Airport airport)
        {
            var distanceService = new DistanceService();

            return(distanceService.Distance(this.Latitude, this.Longitude, airport.Latitude, airport.Longitude, 'M'));
        }
コード例 #6
0
        public void Test_Collect_Correct_Users()
        {
            //ARRANGE
            DistanceService distanceService = new DistanceService();

            UserService userService = new UserService(distanceService);

            var allUsers = new List <User>()
            {
                new User
                {
                    id         = 1,
                    First_Name = "Test",
                    Last_Name  = "Outside",
                    Email      = "*****@*****.**",
                    IP_Address = "192.57.232.111",
                    Latitude   = 34.003135,
                    Longitude  = -117.7228641,
                },
                new User
                {
                    id         = 2,
                    First_Name = "Test",
                    Last_Name  = "Within",
                    Email      = "*****@*****.**",
                    IP_Address = "67.4.69.137",
                    Latitude   = 51.6553959,
                    Longitude  = 0.0572553,
                },
                new User
                {
                    id         = 3,
                    First_Name = "Test",
                    Last_Name  = "Inside",
                    Email      = "*****@*****.**",
                    IP_Address = "192.57.232.111",
                    Latitude   = 34.003135,
                    Longitude  = -117.7228641,
                }
            };

            var usersLondon = new List <User>()
            {
                new User
                {
                    id         = 3,
                    First_Name = "Test",
                    Last_Name  = "Inside",
                    Email      = "*****@*****.**",
                    IP_Address = "192.57.232.111",
                    Latitude   = 34.003135,
                    Longitude  = -117.7228641,
                }
            };

            //ACT
            var result = userService.Users(allUsers, usersLondon);

            //ASSERT
            NUnit.Framework.Assert.AreEqual(2, result.Count());
        }
コード例 #7
0
 public void GeohashQueries_ValidInput_NoException(Geolocation geolocation, double radius)
 {
     DistanceService.GeohashQueries(geolocation, radius);
 }
コード例 #8
0
 public void ValidateGeohash_ValidInput_DoesntThowException(string geo)
 {
     DistanceService.ValidateGeohash(geo);
 }