コード例 #1
0
        public async Task <ActionResult <List <MovieTheaterDTO> > > Get([FromQuery] FilterMovieTheatersDTO filterMovieTheatersDTO)
        {
            var geometryFactory = NtsGeometryServices.Instance.CreateGeometryFactory(srid: 4326);
            var usersLocation   = geometryFactory.CreatePoint(new Coordinate(filterMovieTheatersDTO.Long, filterMovieTheatersDTO.Lat));

            var theaters = await context.movieTheaters
                           .OrderBy(x => x.Location.Distance(usersLocation))
                           .Where(x => x.Location.IsWithinDistance(usersLocation, filterMovieTheatersDTO.DistanceInKms * 1000))
                           .Select(x => new MovieTheaterDTO {
                Id = x.Id, Name = x.Name, DistanceMeters = Math.Round(x.Location.Distance(usersLocation))
            })
                           .ToListAsync();

            return(theaters);
        }
コード例 #2
0
        public async Task GetMovieTheaters5KmsOrCloser()
        {
            var geometryFactory = NtsGeometryServices.Instance.CreateGeometryFactory(srid: 4326);

            using (var context = LocalDbDatabaseInitializer.GetDbContextLocalDb())
            {
                var theaters = new List <MovieTheater>
                {
                    new MovieTheater {
                        Name = "Agora", Location = geometryFactory.CreatePoint(new Coordinate(-69.9388777, 18.4839233))
                    },
                    new MovieTheater {
                        Name = "Sambil", Location = geometryFactory.CreatePoint(new Coordinate(-69.9118804, 18.4826214))
                    },
                    new MovieTheater {
                        Name = "Megacentro", Location = geometryFactory.CreatePoint(new Coordinate(-69.856427, 18.506934))
                    },
                    new MovieTheater {
                        Name = "Village East Cinema", Location = geometryFactory.CreatePoint(new Coordinate(-73.986227, 40.730898))
                    }
                };

                context.AddRange(theaters);
                context.SaveChanges();
            }

            var filterMovieTheatersDTO = new FilterMovieTheatersDTO()
            {
                DistanceInKms = 5,
                Lat           = 18.481139,
                Long          = -69.938950
            };

            using (var context = LocalDbDatabaseInitializer.GetDbContextLocalDb())
            {
                var controller = new MovieTheatersController(context);
                var response   = await controller.Get(filterMovieTheatersDTO);

                var theatersFromController = response.Value;
                Assert.AreEqual(2, theatersFromController.Count);
            }
        }