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); }
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); }
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); }
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); }
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); }