Exemplo n.º 1
0
        public void Parse_SingleStation_MultipleObs()
        {
            var parser = new ParseMETARCSV();
            var obs    = parser.Parse(Resource.KDEN_METAR_CSV, new[] { "KDEN" });

            obs.Count.Should().Be(1);
            obs[0].ICAO.Should().Be("KDEN");
            obs[0].GeographicData.Should().NotBeNull();
            obs[0].GeographicData.Elevation.Should().Be(1640.0f);
            obs[0].GeographicData.Latitude.Should().Be(39.85f);
            obs[0].GeographicData.Longitude.Should().Be(-104.65f);
            obs[0].METAR.Count.Should().Be(2);
            var metar = obs[0].METAR[0];

            metar.Altimeter.Should().Be(30.221457f);
            metar.Dewpoint.Should().Be(-16.7f);
            metar.FlightCategory.Should().Be(FlightCategoryType.VFR);
            metar.ObsTime.Should().Be(ParserHelpers.ParseDateTime("2019-10-31T01:53:00Z"));
            metar.ObsType.Should().Be(METARType.METAR);
            metar.Precipitation.Should().BeNull();
            metar.QualityControlFlags.Count.Should().Be(1);
            metar.QualityControlFlags.Where(q => q == QualityControlFlagType.AutoStation).FirstOrDefault().Should().NotBeNull();
            metar.Temperature.Should().Be(-11.1f);
            metar.Dewpoint.Should().Be(-16.7f);
            metar.Wind.Should().NotBeNull();
            metar.Wind.Direction.Should().Be(200);
            metar.Wind.Speed.Should().Be(12);
            metar.Wind.Gust.Should().BeNull();
            metar.Visibility.Should().Be(10f);
            metar.Altimeter.Should().Be(30.221457f);
            metar.SeaLevelPressure.Should().Be(1031.2f);
            metar.SkyCondition.Count().Should().Be(1);
            metar.SkyCondition[0].SkyCondition.Should().Be(SkyConditionType.CLR);
            metar.Weather.Should().BeNull();
            metar.ThreeHourObsData.Should().BeNull();
            metar.SixHourData.Should().BeNull();
            metar.TwentyFourHourData.Should().BeNull();
            metar.Precipitation.Should().BeNull();

            metar = obs[0].METAR[1];

            metar.SkyCondition.Count.Should().Be(2);
            metar.SkyCondition[0].SkyCondition.Should().Be(SkyConditionType.FEW);
            metar.SkyCondition[0].CloudBase.Should().Be(10000);
            metar.SkyCondition[1].SkyCondition.Should().Be(SkyConditionType.FEW);
            metar.SkyCondition[1].CloudBase.Should().Be(20000);
        }
Exemplo n.º 2
0
        public void Parse_SingleStation_MultipleObs()
        {
            var parser = new ParseMETARXML();
            var obs    = parser.Parse(Resource.KIAD_METAR_XML, new[] { "KIAD" });

            obs.Count.Should().Be(1);
            obs[0].ICAO.Should().Be("KIAD");
            obs[0].GeographicData.Should().NotBeNull();
            obs[0].GeographicData.Latitude.Should().Be(38.93f);
            obs[0].GeographicData.Longitude.Should().Be(-77.45f);
            obs[0].GeographicData.Elevation.Should().Be(93.0f);
            var metars = obs[0].METAR;

            metars.Count.Should().Be(2);
            metars[0].Altimeter.Should().Be(30.008858f);
            metars[0].Dewpoint.Should().Be(5.6f);
            metars[0].FlightCategory.Should().Be(FlightCategoryType.VFR);
            metars[0].ObsTime.Should().Be(ParserHelpers.ParseDateTime("2019-10-19T22:52:00Z"));
            metars[0].Precipitation.Should().BeNull();
            metars[0].QualityControlFlags.Should().NotBeEmpty();
            metars[0].QualityControlFlags[0].Should().Be(QualityControlFlagType.AutoStation);
            metars[0].RawMETAR.Should().Be("KIAD 192252Z 15003KT 10SM FEW120 SCT180 BKN230 BKN250 14/06 A3001 RMK AO2 SLP164 T01440056");
            metars[0].SeaLevelPressure.Should().Be(1016.4f);
            metars[0].SkyCondition.Should().NotBeEmpty();
            metars[0].SkyCondition[0].SkyCondition.Should().Be(SkyConditionType.FEW);
            metars[0].SkyCondition[0].CloudBase.Should().Be(12000);
            metars[0].SkyCondition[1].SkyCondition.Should().Be(SkyConditionType.SCT);
            metars[0].SkyCondition[1].CloudBase.Should().Be(18000);
            metars[0].SkyCondition[2].SkyCondition.Should().Be(SkyConditionType.BKN);
            metars[0].SkyCondition[2].CloudBase.Should().Be(23000);
            metars[0].SkyCondition[3].SkyCondition.Should().Be(SkyConditionType.BKN);
            metars[0].SkyCondition[3].CloudBase.Should().Be(25000);
            metars[0].Temperature.Should().Be(14.4f);
            metars[0].VerticalVisibility.Should().BeNull();
            metars[0].Visibility.Should().Be(10.0f);
            metars[0].Weather.Should().BeNull();
            metars[0].Wind.Direction.Should().Be(150);
            metars[0].Wind.Gust.Should().BeNull();
            metars[0].Wind.Speed.Should().Be(3);
            metars[0].TwentyFourHourData.Should().BeNull();
            metars[0].ThreeHourObsData.Should().BeNull();
            metars[0].SixHourData.Should().BeNull();
            metars[0].ObsType.Should().Be(METARType.METAR);
        }
Exemplo n.º 3
0
        public void Parse_SingleStation_SpeciObs()
        {
            var parser = new ParseMETARXML();
            var obs    = parser.Parse(Resource.KATL_SPECI_METARs_XML, new[] { "KATL" });

            obs.Count.Should().Be(1);
            obs[0].ICAO.Should().Be("KATL");
            obs[0].GeographicData.Should().NotBeNull();
            obs[0].GeographicData.Latitude.Should().Be(33.63f);
            obs[0].GeographicData.Longitude.Should().Be(-84.45f);
            obs[0].GeographicData.Elevation.Should().Be(296.0f);
            // Check regular METAR
            var metars = obs[0].METAR;

            obs[0].METAR.Count.Should().Be(3);

            metars[0].Altimeter.Should().Be(29.760826f);
            metars[0].Dewpoint.Should().Be(10.6f);
            metars[0].FlightCategory.Should().Be(FlightCategoryType.IFR);
            metars[0].ObsTime.Should().Be(ParserHelpers.ParseDateTime("2019-10-19T23:52:00Z"));
            metars[0].Precipitation.Should().Be(0.04f);
            metars[0].QualityControlFlags.Should().NotBeEmpty();
            metars[0].QualityControlFlags[0].Should().Be(QualityControlFlagType.AutoStation);
            metars[0].RawMETAR.Should().Be("KATL 192352Z 04017KT 8SM -RA BKN007 OVC012 13/11 A2976 RMK AO2 SLP076 CIG 006V009 P0004 60074 T01280106 10133 20122 56007");
            metars[0].SeaLevelPressure.Should().Be(1007.6f);
            metars[0].SkyCondition.Should().NotBeEmpty();
            metars[0].SkyCondition[0].SkyCondition.Should().Be(SkyConditionType.BKN);
            metars[0].SkyCondition[0].CloudBase.Should().Be(700);
            metars[0].SkyCondition[1].SkyCondition.Should().Be(SkyConditionType.OVC);
            metars[0].SkyCondition[1].CloudBase.Should().Be(1200);
            metars[0].Temperature.Should().Be(12.8f);
            metars[0].VerticalVisibility.Should().BeNull();
            metars[0].Visibility.Should().Be(8.0f);
            metars[0].Weather.Should().Be("-RA");
            metars[0].Wind.Direction.Should().Be(40);
            metars[0].Wind.Gust.Should().BeNull();
            metars[0].Wind.Speed.Should().Be(17);
            metars[0].TwentyFourHourData.Should().BeNull();
            metars[0].TemperatureRange.Should().NotBeNull();
            metars[0].TemperatureRange.MaxTemperature.Should().Be(13.3f);
            metars[0].TemperatureRange.MinTemperature.Should().Be(12.2f);
            metars[0].ThreeHourObsData.Should().NotBeNull();
            metars[0].ThreeHourObsData.Precipitation.Should().BeNull();
            metars[0].ThreeHourObsData.PressureTendency.Should().Be(-0.7f);
            metars[0].SixHourData.Should().NotBeNull();
            metars[0].SixHourData.Precipitation.Should().Be(0.74f);
            metars[0].ObsType.Should().Be(METARType.METAR);

            // Check SPECI METAR
            metars[2].Altimeter.Should().Be(29.760826f);
            metars[2].Dewpoint.Should().Be(11.1f);
            metars[2].ObsTime.Should().Be(ParserHelpers.ParseDateTime("2019-10-19T21:52:00Z"));
            metars[2].Precipitation.Should().Be(0.12f);
            metars[2].QualityControlFlags.Should().NotBeEmpty();
            metars[2].QualityControlFlags[0].Should().Be(QualityControlFlagType.AutoStation);
            metars[2].RawMETAR.Should().Be("KATL 192152Z 07018KT 2SM -RA BR BKN007 OVC012 13/11 A2976 RMK AO2 SFC VIS 4 SLP077 CIG 006V009 P0012 T01280111");
            metars[2].SeaLevelPressure.Should().Be(1007.7f);
            metars[2].SkyCondition.Should().NotBeEmpty();
            metars[2].SkyCondition[0].SkyCondition.Should().Be(SkyConditionType.BKN);
            metars[2].SkyCondition[0].CloudBase.Should().Be(700);
            metars[2].SkyCondition[1].SkyCondition.Should().Be(SkyConditionType.OVC);
            metars[2].SkyCondition[1].CloudBase.Should().Be(1200);
            metars[2].Temperature.Should().Be(12.8f);
            metars[2].VerticalVisibility.Should().BeNull();
            metars[2].Visibility.Should().Be(2.0f);
            metars[2].Weather.Should().Be("-RA BR");
            metars[2].Wind.Direction.Should().Be(70);
            metars[2].Wind.Gust.Should().BeNull();
            metars[2].Wind.Speed.Should().Be(18);
            metars[2].TwentyFourHourData.Should().BeNull();
            metars[2].TemperatureRange.Should().BeNull();
            metars[2].ThreeHourObsData.Should().BeNull();
            metars[2].SixHourData.Should().BeNull();
            metars[2].ObsType.Should().Be(METARType.SPECI);
        }
Exemplo n.º 4
0
        public void Parse_SingleStation_General()
        {
            var parser    = new ParseTAFXML();
            var forecasts = parser.Parse(Resource.KPHL_TAF_XML, new List <string>()
            {
                "KPHL"
            });

            forecasts.Count().Should().Be(1);
            var fcst = forecasts[0];

            fcst.GeographicData.Should().NotBeNull();
            fcst.GeographicData.Elevation.Should().Be(18.0f);
            fcst.GeographicData.Latitude.Should().Be(39.87f);
            fcst.GeographicData.Longitude.Should().Be(-75.23f);
            fcst.ICAO.Should().Be("KPHL");
            fcst.TAF.Count.Should().Be(11);
            var taf = fcst.TAF[0];

            taf.RawTAF.Should().Be("KPHL 262320Z 2700/2806 11008KT P6SM SCT040 BKN100 FM270800 10010KT P6SM BKN020 OVC040 FM271000 10012G20KT 5SM -RA BR OVC010 WS020/16040KT FM271300 15014G24KT 3SM +RA BR OVC008 WS020/19045KT FM271700 20010G18KT 5SM -RA BR OVC015 FM271900 24011KT P6SM SCT050");
            taf.IssuedTime.Should().Be(ParserHelpers.ParseDateTime("2019-10-26T23:20:00Z"));
            taf.BulletinTime.Should().Be(ParserHelpers.ParseDateTime("2019-10-26T23:20:00Z"));
            taf.ValidTimeStart.Should().Be(ParserHelpers.ParseDateTime("2019-10-27T00:00:00Z"));
            taf.ValidTimeEnd.Should().Be(ParserHelpers.ParseDateTime("2019-10-28T06:00:00Z"));
            taf.TAFLine.Count().Should().Be(6);
            var tafLine = taf.TAFLine[0];

            tafLine.Altimeter.Should().BeNull();
            tafLine.ForecastTimeEnd.Should().Be(ParserHelpers.ParseDateTime("2019-10-27T08:00:00Z"));
            tafLine.ForecastTimeStart.Should().Be(ParserHelpers.ParseDateTime("2019-10-27T00:00:00Z"));
            tafLine.IcingHazards.Count.Should().Be(0);
            tafLine.NotDecoded.Should().BeNull();
            tafLine.Probability.Should().BeNull();
            tafLine.SkyCondition.Count().Should().Be(2);
            tafLine.SkyCondition[0].CloudBase.Should().Be(4000);
            tafLine.SkyCondition[0].SkyCondition.Should().Be(SkyConditionType.SCT);
            tafLine.SkyCondition[1].CloudBase.Should().Be(10000);
            tafLine.SkyCondition[1].SkyCondition.Should().Be(SkyConditionType.BKN);
            tafLine.Wind.Should().NotBeNull();
            tafLine.Wind.Direction.Should().Be(110);
            tafLine.Wind.Gust.Should().BeNull();
            tafLine.Wind.Speed.Should().Be(8);
            tafLine.WindShear.Should().BeNull();
            tafLine.Weather.Should().BeNull();
            tafLine.Visibility.Should().Be(6.21f);

            tafLine = taf.TAFLine[2];
            tafLine.ChangeIndicator.Should().Be(ChangeIndicatorType.FM);
            tafLine.Altimeter.Should().BeNull();
            tafLine.ForecastTimeEnd.Should().Be(ParserHelpers.ParseDateTime("2019-10-27T13:00:00Z"));
            tafLine.ForecastTimeStart.Should().Be(ParserHelpers.ParseDateTime("2019-10-27T10:00:00Z"));
            tafLine.IcingHazards.Count.Should().Be(0);
            tafLine.NotDecoded.Should().BeNull();
            tafLine.Probability.Should().BeNull();
            tafLine.SkyCondition.Count().Should().Be(1);
            tafLine.SkyCondition[0].CloudBase.Should().Be(1000);
            tafLine.SkyCondition[0].SkyCondition.Should().Be(SkyConditionType.OVC);
            tafLine.Wind.Should().NotBeNull();
            tafLine.Wind.Direction.Should().Be(100);
            tafLine.Wind.Gust.Should().Be(20);
            tafLine.Wind.Speed.Should().Be(12);
            tafLine.WindShear.Should().NotBeNull();
            tafLine.WindShear.Direction.Should().Be(160);
            tafLine.WindShear.Height.Should().Be(2000);
            tafLine.WindShear.Speed.Should().Be(40);
            tafLine.Weather.Should().Be("-RA BR");
            tafLine.Visibility.Should().Be(5.0f);
        }
Exemplo n.º 5
0
        public void ParseMultipleStations()
        {
            var parser    = new ParseTAFCSV();
            var forecasts = parser.Parse(Resource.PHNL_KSEA_KDEN_TAF_CSV, new List <string>()
            {
                "PHNL", "KSEA", "KDEN"
            });

            forecasts.Count().Should().Be(3);
            forecasts[0].ICAO.Should().Be("PHNL");
            forecasts[0].TAF.Count().Should().Be(9);
            forecasts[0].GeographicData.Latitude.Should().Be(21.33f);
            forecasts[0].GeographicData.Longitude.Should().Be(-157.92f);
            forecasts[0].GeographicData.Elevation.Should().Be(4);
            var taf = forecasts[0].TAF[0];

            taf.RawTAF.Should().Be("PHNL 032126Z 0321/0424 20010KT P6SM VCSH SCT025 BKN060 FM040500 35003KT P6SM VCSH SCT025 BKN060 FM042000 18008KT P6SM SCT025 SCT060");
            taf.IssuedTime.Should().Be(ParserHelpers.ParseDateTime("2019-11-03T21:26:00Z"));
            taf.BulletinTime.Should().Be(ParserHelpers.ParseDateTime("2019-11-03T21:26:00Z"));
            taf.ValidTimeStart.Should().Be(ParserHelpers.ParseDateTime("2019-11-03T21:00:00Z"));
            taf.ValidTimeEnd.Should().Be(ParserHelpers.ParseDateTime("2019-11-05T00:00:00Z"));
            taf.Remarks.Should().Be("AMD");
            var tafLine = taf.TAFLine[0];

            tafLine.ForecastTimeStart.Should().Be(ParserHelpers.ParseDateTime("2019-11-03T21:00:00Z"));
            tafLine.ForecastTimeEnd.Should().Be(ParserHelpers.ParseDateTime("2019-11-04T05:00:00Z"));
            tafLine.Wind.Direction.Should().Be(200);
            tafLine.Wind.Speed.Should().Be(10);
            tafLine.Wind.Gust.Should().BeNull();
            tafLine.Visibility.Should().Be(6.21f);
            tafLine.Weather.Should().Be("VCSH");
            tafLine.SkyCondition.Count().Should().Be(2);
            tafLine.SkyCondition[0].CloudBase.Should().Be(2500);
            tafLine.SkyCondition[0].SkyCondition.Should().Be(SkyConditionType.SCT);
            tafLine.SkyCondition[1].CloudBase.Should().Be(6000);
            tafLine.SkyCondition[1].SkyCondition.Should().Be(SkyConditionType.BKN);
            tafLine = taf.TAFLine[1];
            tafLine.ChangeIndicator.Should().Be(ChangeIndicatorType.FM);
            tafLine.ForecastTimeStart.Should().Be(ParserHelpers.ParseDateTime("2019-11-04T05:00:00Z"));
            tafLine.ForecastTimeEnd.Should().Be(ParserHelpers.ParseDateTime("2019-11-04T20:00:00Z"));

            forecasts[1].ICAO.Should().Be("KSEA");
            forecasts[1].TAF.Count().Should().Be(10);
            taf = forecasts[1].TAF[0];
            taf.RawTAF.Should().Be("KSEA 032101Z 0321/0424 35006KT P6SM SCT200 FM040200 VRB03KT P6SM SCT200 FM041000 VRB03KT P6SM SCT004 BKN010 FM041900 36005KT P6SM SCT010 SCT200");
            forecasts[1].GeographicData.Latitude.Should().Be(47.45f);
            forecasts[1].GeographicData.Longitude.Should().Be(-122.32f);
            forecasts[1].GeographicData.Elevation.Should().Be(136);

            tafLine = taf.TAFLine[1];
            tafLine.ForecastTimeStart.Should().Be(ParserHelpers.ParseDateTime("2019-11-04T02:00:00Z"));
            tafLine.ChangeIndicator.Should().Be(ChangeIndicatorType.FM);

            forecasts[2].ICAO.Should().Be("KDEN");
            forecasts[2].TAF.Count().Should().Be(12);
            taf = forecasts[2].TAF[11];
            taf.RawTAF.Should().Be("KDEN 021731Z 0218/0324 10005KT P6SM FEW150 FM022100 14007KT P6SM FEW150 SCT220 FM030100 19010KT P6SM SCT150 BKN220");
            forecasts[2].GeographicData.Latitude.Should().Be(39.85f);
            forecasts[2].GeographicData.Longitude.Should().Be(-104.65f);
            forecasts[2].GeographicData.Elevation.Should().Be(1640);
        }