Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        /// <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);
        }