Пример #1
0
        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);
        }
Пример #2
0
        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();
        }