private IEnumerable <Point> GetResultsFromQuery(GeoQueryResult result) { return(from item in result.Items let geoJsonString = item["geoJson"].S let point = JsonConvert.DeserializeObject <GeoPoint>(geoJsonString) select new Point { lat = point.lat, lng = point.lng }); }
private IEnumerable <SchoolSearchResult> GetResultsFromQuery(GeoQueryResult result) { var dtos = from item in result.Items let geoJsonString = item[_config.GeoJsonAttributeName].S let point = JsonConvert.DeserializeObject <GeoPoint>(geoJsonString) select new SchoolSearchResult { Latitude = point.Latitude, Longitude = point.Longitude, RangeKey = item[_config.RangeKeyAttributeName].S, SchoolName = item.ContainsKey("schoolName") ? item["schoolName"].S : string.Empty }; return(dtos); }
private async Task <GeoQueryResult> DispatchQueries(IEnumerable <GeohashRange> ranges, GeoQueryRequest geoQueryRequest, CancellationToken cancellationToken) { var geoQueryResult = new GeoQueryResult(); var futureList = new List <Task>(); var internalSource = new CancellationTokenSource(); var internalToken = internalSource.Token; var cts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, internalToken); foreach (var outerRange in ranges) { foreach (var range in outerRange.TrySplit(_config.HashKeyLength)) { var task = RunGeoQuery(geoQueryRequest, geoQueryResult, range, cts.Token); futureList.Add(task); } } Exception inner = null; try { for (var i = 0; i < futureList.Count; i++) { try { await futureList[i].ConfigureAwait(false); } catch (Exception e) { inner = e; // cancel the others internalSource.Cancel(true); } } } catch (Exception ex) { inner = inner ?? ex; throw new ClientException("Querying Amazon DynamoDB failed.", inner); } return(geoQueryResult); }
private IEnumerable <PhotoData> GetResultsFromQuery(GeoQueryResult result) { var dtos = from item in result.Items let geoJsonString = item[_config.GeoJsonAttributeName].S let point = JsonConvert.DeserializeObject <GeoPoint>(geoJsonString) select new PhotoDataModel { rangeKey = item[_config.RangeKeyAttributeName].S, lat = point.Latitude, lng = point.Longitude, imgUrl = item.ContainsKey("imgUrl") ? item["imgUrl"].S : string.Empty, imgUrlLarge = item.ContainsKey("imgUrlLarge") ? item["imgUrlLarge"].S : string.Empty }; return(dtos); }
private IEnumerable <resultsModel> GetResultsFromQuery(GeoQueryResult result) { var dtos = from item in result.Items let geoJsonString = item[_config.GeoJsonAttributeName].S let point = JsonConvert.DeserializeObject <GeoPoint>(geoJsonString) select new resultsModel { Latitude = point.Latitude, Longitude = point.Longitude, RangeKey = item[_config.RangeKeyAttributeName].S, // zipcode = item.ContainsKey("zipcode") ? item["zipcode"].S : string.Empty, // Title = item.ContainsKey("Title") ? item["Title"].S : string.Empty }; return(dtos); }
private async Task RunGeoQuery(GeoQueryRequest request, GeoQueryResult geoQueryResult, GeohashRange range, CancellationToken cancellationToken) { var queryRequest = request.QueryRequest.CopyQueryRequest(); var hashKey = S2Manager.GenerateHashKey(range.RangeMin, _config.HashKeyLength); var results = await _dynamoDBManager.QueryGeohashAsync(queryRequest, hashKey, range, cancellationToken).ConfigureAwait(false); foreach (var queryResult in results) { cancellationToken.ThrowIfCancellationRequested(); // This is a concurrent collection geoQueryResult.QueryResults.Add(queryResult); var filteredQueryResult = Filter(queryResult.Items, request); // this is a concurrent collection foreach (var r in filteredQueryResult) { geoQueryResult.Items.Add(r); } } }