/// <summary> /// Gets data for the station map. /// </summary> /// <returns>List of StationMapDtos</returns> public async Task <List <StationMapDto> > GetStationMapData() { List <StationMapDto> stationMapDtos = await _dbContext.Station .AsNoTracking() .Select(x => new StationMapDto { Id = x.Id, DisplayName = x.DisplayName, Latitude = x.Latitude, Longitude = x.Longitude, IsActive = x.IsActive }) .ToListAsync(); // Get high and low temperatures for each station stationMapDtos.ForEach(dto => { ExtremesTday extremesTdayData = _dbContext.ExtremesTday .AsNoTracking() .Where(x => x.StationKeyNavigation.Id == dto.Id) // Perform any necessary calculations and conversions .Select(x => x.ConvertUnits(false)) .SingleOrDefault(); if (extremesTdayData != null) { dto.AirTemperatureHigh = extremesTdayData.AirT2mMax; dto.AirTemperatureLow = extremesTdayData.AirT2mMin; } }); return(stationMapDtos); }
/// <summary> /// Gets data for the realtime data table. /// </summary> /// <param name="isMetricUnits">Returns data in metric units if true, english units if false</param> /// <param name="isWindChill">Returns windchill data if true, heatindex data if false</param> /// <returns>List of RealtimeDataDtos</returns> public async Task <List <RealtimeDataDto> > ListRealtimeData(bool isMetricUnits, bool?isWindChill) { var now = DateTime.Now.Date; // Get initial station data var realtimeDataDtos = await _dbContext.Station .AsNoTracking() .Include(x => x.Public) .Where(x => x.IsActive) .OrderBy(x => x.DisplayName) .Select(x => new RealtimeDataDto { StationId = x.Id, // TODO: Remove comment to allow IsStationOffline to work IsStationOffline = !x.Public.Ts.HasValue, // || x.Public.Ts.Value.Date < now, StationName = x.DisplayName, StationTimestamp = x.Public.Ts }) .ToListAsync(); // Get realtime data for online stations realtimeDataDtos.ForEach(dto => { if (!dto.IsStationOffline) { Public publicData = _dbContext.Public .AsNoTracking() .Where(x => x.StationKeyNavigation.Id == dto.StationId) // Perform any necessary calculations and conversions .Select(x => x.ConvertUnits(isMetricUnits, isWindChill)) .Single(); ExtremesTday extremesTdayData = _dbContext.ExtremesTday .AsNoTracking() .Where(x => x.StationKeyNavigation.Id == dto.StationId) // Perform any necessary calculations and conversions .Select(x => x.ConvertUnits(isMetricUnits)) .Single(); ExtremesYday extremesYdayData = _dbContext.ExtremesYday .AsNoTracking() .Where(x => x.StationKeyNavigation.Id == dto.StationId) // Perform any necessary calculations and conversions .Select(x => x.ConvertUnits(isMetricUnits)) .Single(); // Set public data dto.AirTemperature = publicData.AirT2m; dto.IsWindChill = publicData.IsWindChill; dto.Felt = publicData.Felt; dto.DewPoint = publicData.DewPoint; dto.RealHumidity = publicData.Rh; dto.WindDirection = publicData.WndDir10m; dto.WindSpeed = publicData.WndSpd10m; dto.Pressure = publicData.PressSealev1; dto.Precipitation = publicData.PrecipTb3Today; // Set Yesterday's extremes data dto.YesterdayExtreme = new ExtremeDto { AirTemperatureHighTimestamp = extremesYdayData.AirT2mTmx, AirTemperatureLowTimestamp = extremesYdayData.AirT2mTmn, DewPointHighTimestamp = extremesYdayData.DewPt2mTmx, DewPointLowTimestamp = extremesYdayData.DewPt2mTmn, RealHumidityHighTimestamp = extremesYdayData.Rh2mTmx, RealHumidityLowTimestamp = extremesYdayData.Rh2mTmn, WindSpeedMaxTimestamp = extremesYdayData.WndSpd10mTmx, AirTemperatureHigh = extremesYdayData.AirT2mMax, AirTemperatureLow = extremesYdayData.AirT2mMin, DewPointHigh = extremesYdayData.DewPt2mMax, DewPointLow = extremesYdayData.DewPt2mMin, RealHumidityHigh = extremesYdayData.Rh2mMax, RealHumidityLow = extremesYdayData.Rh2mMin, WindSpeedMax = extremesYdayData.WndSpd10mMax, Precipitation = extremesYdayData.PrecipTb3Today }; // Set Today's extremes data dto.TodayExtreme = new ExtremeDto { AirTemperatureHighTimestamp = extremesTdayData.AirT2mTmx, AirTemperatureLowTimestamp = extremesTdayData.AirT2mTmn, DewPointHighTimestamp = extremesTdayData.DewPt2mTmx, DewPointLowTimestamp = extremesTdayData.DewPt2mTmn, RealHumidityHighTimestamp = extremesTdayData.Rh2mTmx, RealHumidityLowTimestamp = extremesTdayData.Rh2mTmn, WindSpeedMaxTimestamp = extremesTdayData.WndSpd10mTmx, AirTemperatureHigh = extremesTdayData.AirT2mMax, AirTemperatureLow = extremesTdayData.AirT2mMin, DewPointHigh = extremesTdayData.DewPt2mMax, DewPointLow = extremesTdayData.DewPt2mMin, RealHumidityHigh = extremesTdayData.Rh2mMax, RealHumidityLow = extremesTdayData.Rh2mMin, WindSpeedMax = extremesTdayData.WndSpd10mMax }; } else { dto.YesterdayExtreme = new ExtremeDto(); dto.TodayExtreme = new ExtremeDto(); } }); return(realtimeDataDtos); }