public async Task ReverseGeocodeLookup() { if (_geocodeService is NullGeocodeService) { return; } GeoResult coordinates; Assert.True(GeoResult.TryParse(GREEN_BAY_COORDINATES, out coordinates)); var location = await _geocodeService.ReverseGeocodeAsync(coordinates.Latitude.GetValueOrDefault(), coordinates.Longitude.GetValueOrDefault()); Assert.Equal("US", location?.Country); Assert.Equal("WI", location?.Level1); Assert.Equal("Brown County", location?.Level2); Assert.Equal("Green Bay", location?.Locality); }
public override async Task HandleItemAsync(WorkItemContext context) { var workItem = context.GetData <SetLocationFromGeoWorkItem>(); GeoResult result; if (!GeoResult.TryParse(workItem.Geo, out result)) { return; } var location = await _cacheClient.GetAsync <Location>(workItem.Geo, null).AnyContext(); if (location == null) { try { result = await _geocodeService.ReverseGeocodeAsync(result.Latitude.GetValueOrDefault(), result.Longitude.GetValueOrDefault()).AnyContext(); location = result.ToLocation(); await _metricsClient.CounterAsync(MetricNames.UsageGeocodingApi).AnyContext(); } catch (Exception ex) { Logger.Error().Exception(ex).Message($"Error occurred looking up reverse geocode: {workItem.Geo}").Write(); } } if (location == null) { return; } await _cacheClient.SetAsync(workItem.Geo, location, TimeSpan.FromDays(3)).AnyContext(); var ev = await _eventRepository.GetByIdAsync(workItem.EventId).AnyContext(); if (ev == null) { return; } ev.SetLocation(location); await _eventRepository.SaveAsync(ev).AnyContext(); }