public async Task ObtenerSalasDeCineA5kilometrosOMenos() { var geometryFactory = NtsGeometryServices.Instance.CreateGeometryFactory(srid: 4326); using (var context = LocalDbDatabaseInitializer.GetDbContextLocalDb(false)) { var salasDeCine = new List <SalaDeCine>() { new SalaDeCine { Nombre = "Agora", Ubicacion = geometryFactory.CreatePoint(new Coordinate(-69.9388777, 18.4839233)) } }; context.AddRange(salasDeCine); await context.SaveChangesAsync(); } var filtro = new SalaDeCineCercanoFiltroDTO() { DistanciaEnKms = 5, Latitud = 18.481139, Longitud = -69.938950 }; using (var context = LocalDbDatabaseInitializer.GetDbContextLocalDb(false)) { var mapper = ConfigurarAutoMapper(); var controller = new SalasDeCineController(context, mapper, geometryFactory); var respuesta = await controller.Cercanos(filtro); var valor = respuesta.Value; Assert.AreEqual(2, valor.Count); } }
public async Task <ActionResult <List <SalaDeCineCercanoDTO> > > Cercanos([FromQuery] SalaDeCineCercanoFiltroDTO filtro) { var ubicacionUsuario = geometryFactory.CreatePoint(new Coordinate(filtro.Longitud, filtro.Latitud)); var salasDeCine = await context.SalasDeCine .OrderBy(x => x.Ubicacion.Distance(ubicacionUsuario)) .Where(x => x.Ubicacion.IsWithinDistance(ubicacionUsuario, filtro.DistanciaEnKms * 100)) .Select(x => new SalaDeCineCercanoDTO { Id = x.Id, Nombre = x.Nombre, Latitud = x.Ubicacion.Y, Longitud = x.Ubicacion.X, DistanciaEnMetros = Math.Round(x.Ubicacion.Distance(ubicacionUsuario)) }) .ToListAsync(); return(salasDeCine); }