public async Task <List <PoiDto> > ListClosestPoisAsync(SearchPoiDto search) { if (search == null) { throw new ArgumentNullException(nameof(search)); } IQueryable <Poi> query = DbContext.Pois; //TODO: null-t nem engedni IPoint location = null; //order by distance if (search.Longitude.HasValue && search.Latitude.HasValue) { location = LocationManager.GeometryFactory.CreatePoint(new GeoAPI.Geometries.Coordinate(search.Longitude.Value, search.Latitude.Value)); //TODO: valszeg ez nem marad szimplan query query = query.OrderBy(p => p.Location.Distance(location)); } var result = await query.Select(x => new { Poi = x, Distance = location != null ? x.Location.Distance(location) : 0 }).ToListAsync(); var pois = Mapper.Map <List <PoiDto> >(result.Select(r => r.Poi).ToList()); pois.ForEach(t => t.Distance = GeoCalculator.GetDistance(location.Y, location.X, t.Latitude, t.Longitude, 1, DistanceUnit.Kilometers)); return(pois); }
public async Task <ActionResult <List <PoiDto> > > ListClosestPoisAsync(SearchPoiDto search) => Result(await PoiManager.ListClosestPoisAsync(search));