public async Task <ActionResult <PagedSearch <StrokeUnit> > > Get( CancellationToken cancellationToken, [BindRequired, FromQuery] string address, int page = 1, int pageSize = 20) { var decodedAddress = Encoding.UTF8.GetString(Convert.FromBase64String(address)); var location = await _locationService.GetLocationAsync(decodedAddress, cancellationToken); var searchlocation = new GeoCoordinate(location.Latitude, location.Longitude); var allStrokeUnits = _options.DataFiles.SelectMany( dataFile => _strokeUnitsService.GetRecordsWithLocationAsync(dataFile, cancellationToken) .GetAwaiter() .GetResult() ).ToArray(); var result = allStrokeUnits.Select(x => new StrokeUnit { City = x.City, Latitude = x.Latitude, Longitude = x.Longitude, Name = x.Name, Location = x.Location, PostCode = x.PostCode, Street = x.Street, DistanceKm = new GeoCoordinate(x.Latitude, x.Longitude).GetDistanceTo(searchlocation) / 1000 }); return(result.OrderBy(x => x.DistanceKm).Page(page, pageSize)); }
public async Task <IEnumerable <IStrokeUnitRecord> > Get( [BindRequired, FromQuery] string address, CancellationToken cancellationToken) { var decodedAddress = Encoding.UTF8.GetString(Convert.FromBase64String(address)); var location = await _locationService.GetLocationAsync(decodedAddress, cancellationToken); var searchlocation = new GeoCoordinate(location.Latitude, location.Longitude); var allStrokeUnits = _options.DataFiles.SelectMany( dataFile => _strokeUnitsService.GetRecordsWithLocationAsync(dataFile, cancellationToken) .GetAwaiter() .GetResult() ).ToArray(); return(allStrokeUnits.OrderBy(x => new GeoCoordinate(x.Latitude, x.Longitude).GetDistanceTo(searchlocation)).ToArray()); }