public async Task GetCinemaLessThan5Kilometers() { var geometryFactory = NtsGeometryServices.Instance.CreateGeometryFactory(srid: 4326); using (var context = LocalDataBaseInitializer.GetDbContextLocalDb(false)) { var cinemas = new List <Cinema>() { new Cinema { Name = "Agora", Location = geometryFactory.CreatePoint(new Coordinate(-69.9388777, 18.4839233)) } }; context.AddRange(cinemas); await context.SaveChangesAsync(); } var filtro = new CinemaNearFilterDTO() { DistanceKms = 5, Latitude = 18.481139, Longitude = -69.938950 }; using (var context = LocalDataBaseInitializer.GetDbContextLocalDb(false)) { var mapper = ConfigurationAutoMapper(); var controller = new CinemasController(context, mapper, geometryFactory); var response = await controller.Nearby(filtro); var value = response.Value; Assert.AreEqual(2, value.Count); } }
public async Task <ActionResult <List <CinemaNearDTO> > > Nearby([FromQuery] CinemaNearFilterDTO filter) { var locationUser = _geometryFactory.CreatePoint(new Coordinate(filter.Longitude, filter.Latitude)); var cinemas = await _context.Cinemas .Where(x => x.Location.IsWithinDistance(locationUser, filter.DistanceKms * 1000)) .OrderBy(x => x.Location.Distance(locationUser)) .Select(x => new CinemaNearDTO { Id = x.Id, Name = x.Name, Longitude = x.Location.X, Latitude = x.Location.Y, DistanceMeters = Math.Round(x.Location.Distance(locationUser)) }).ToListAsync(); return(cinemas); }