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));
        }
示例#2
0
        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());
        }