diff --git a/src/NGrib/Grib2/Templates/GridDefinitions/0000_LatLonGridDefinition.cs b/src/NGrib/Grib2/Templates/GridDefinitions/0000_LatLonGridDefinition.cs index a8acd89..1d4b11f 100644 --- a/src/NGrib/Grib2/Templates/GridDefinitions/0000_LatLonGridDefinition.cs +++ b/src/NGrib/Grib2/Templates/GridDefinitions/0000_LatLonGridDefinition.cs @@ -105,6 +105,11 @@ internal LatLonGridDefinition(BufferedBinaryReader reader) : base(reader) Dx = reader.ReadInt32() * ratio; Dy = reader.ReadInt32() * ratio; ScanMode = reader.ReadUInt8(); + + if (Lo1 > Lo2) + { + Lo1 -= 360; + } } public override IEnumerable EnumerateGridPoints() diff --git a/tests/NGrib.Tests/Grib2Reader_NcepGfs_Test.cs b/tests/NGrib.Tests/Grib2Reader_NcepGfs_Test.cs index 04635db..242393b 100644 --- a/tests/NGrib.Tests/Grib2Reader_NcepGfs_Test.cs +++ b/tests/NGrib.Tests/Grib2Reader_NcepGfs_Test.cs @@ -3,6 +3,7 @@ using System.Linq; using NFluent; using NGrib.Grib2.CodeTables; +using NGrib.Grib2.Templates.GridDefinitions; using Xunit; namespace NGrib.Tests @@ -38,5 +39,34 @@ public void Test() { (-21, 55.5), 301.005585f }, }); } + + [Fact] + public void Test_FullDomain() + { + using var stream = File.OpenRead(GribFileSamples.NcepGfsFullDomainFile); + var reader = new Grib2Reader(stream); + + var datasets = reader.ReadAllDataSets().ToArray(); + + Check.That(datasets.Select(d => d.Parameter)).ContainsExactly( + Parameter.Temperature + ); + + var temperatureDs = datasets.Single(d => d.Parameter.Equals(Parameter.Temperature)); + + var latLonDef = temperatureDs.GridDefinitionSection.GridDefinition as LatLonGridDefinition; + + Check.That(latLonDef.La1).IsEqualTo(-90f); + Check.That(latLonDef.La2).IsEqualTo(90f); + Check.That(latLonDef.Lo1).IsEqualTo(-180f); + Check.That(latLonDef.Lo2).IsEqualTo(179.75f); + + var vals = reader.ReadDataSetValues(temperatureDs).ToList(); + Check.That(vals).HasSize(1440 * 721); + Check.That(vals.First().Key.Longitude).IsEqualTo(-180f); + Check.That(vals.First().Key.Latitude).IsEqualTo(-90f); + Check.That(vals.Last().Key.Longitude).IsEqualTo(179.75f); + Check.That(vals.Last().Key.Latitude).IsEqualTo(90f); + } } } diff --git a/tests/NGrib.Tests/GribFileSamples.cs b/tests/NGrib.Tests/GribFileSamples.cs index a583d8b..16c2e7c 100644 --- a/tests/NGrib.Tests/GribFileSamples.cs +++ b/tests/NGrib.Tests/GribFileSamples.cs @@ -91,6 +91,11 @@ internal static class GribFileSamples /// public static string WmoOneDataSetMessage { get; } = "samples/wmo-one_dataset-message.grb2"; + /// + /// NCEP GEFS Full Domain (0.25 degree grid) + /// + public static string NcepGfsFullDomainFile { get; } = "samples/gfs.20250622.t00z.pgrb2.0p25.f000"; + /// /// NCEP GFS 20200330/18+12 Forecasts (0.25 degree grid): /// - lon 55 - 55.5 diff --git a/tests/NGrib.Tests/samples/gfs.20250622.t00z.pgrb2.0p25.f000 b/tests/NGrib.Tests/samples/gfs.20250622.t00z.pgrb2.0p25.f000 new file mode 100644 index 0000000..31173a1 Binary files /dev/null and b/tests/NGrib.Tests/samples/gfs.20250622.t00z.pgrb2.0p25.f000 differ