Example #1
0
        /// <summary>
        /// Enumerates the messages in the underlying stream.
        /// </summary>
        /// <returns>The messages in the GRIB 2 stream.</returns>
        public IEnumerable <Message> ReadMessages()
        {
            reader.Seek(0, SeekOrigin.Begin);

            do
            {
                var indicatorSection      = IndicatorSection.BuildFrom(reader);
                var identificationSection = IdentificationSection.BuildFrom(reader);

                var message = new Message(indicatorSection, identificationSection);

                LocalUseSection localUseSection = null;
                do
                {
                    if (reader.PeekSection().Is(SectionCode.LocalUseSection))
                    {
                        localUseSection = LocalUseSection.BuildFrom(reader);
                    }

                    while (reader.PeekSection().Is(SectionCode.GridDefinitionSection))
                    {
                        var gridDefinitionSection = GridDefinitionSection.BuildFrom(reader);

                        while (reader.PeekSection().Is(SectionCode.ProductDefinitionSection))
                        {
                            var productDefinitionSection  = ProductDefinitionSection.BuildFrom(reader, indicatorSection.Discipline);
                            var dataRepresentationSection = DataRepresentationSection.BuildFrom(reader);

                            var bitmapSection = BitmapSection.BuildFrom(reader, dataRepresentationSection.DataPointsNumber);

                            var dataSection = DataSection.BuildFrom(reader);

                            message.AddDataset(
                                localUseSection,
                                gridDefinitionSection,
                                productDefinitionSection,
                                dataRepresentationSection,
                                bitmapSection,
                                dataSection);
                        }
                    }
                } while (!reader.PeekSection().Is(SectionCode.EndSection));
                EndSection.BuildFrom(reader);

                // Saves and restore the current position
                // to avoid losing track of the current message
                // if a data set read happens during the enumeration
                var currentPosition = reader.Position;
                yield return(message);

                reader.Seek(currentPosition, SeekOrigin.Begin);
            } while (!reader.HasReachedStreamEnd && reader.PeekSection().Is(SectionCode.IndicatorSection));
        }
Example #2
0
 internal DataSet(
     Message message,
     LocalUseSection localUseSection,
     GridDefinitionSection gridDefinitionSection,
     ProductDefinitionSection productDefinitionSection,
     DataRepresentationSection dataRepresentationSection,
     BitmapSection bitmapSection,
     DataSection dataSection)
 {
     Message = message;
     GridDefinitionSection     = gridDefinitionSection;
     ProductDefinitionSection  = productDefinitionSection;
     DataRepresentationSection = dataRepresentationSection;
     BitmapSection             = bitmapSection;
     DataSection     = dataSection;
     LocalUseSection = localUseSection;
 }
Example #3
0
        internal void AddDataset(
            LocalUseSection lus,
            GridDefinitionSection gds,
            ProductDefinitionSection pds,
            DataRepresentationSection drs,
            BitmapSection bs,
            DataSection ds)
        {
            var record = new DataSet(
                this,
                lus,
                gds,
                pds,
                drs,
                bs,
                ds);

            dataSets.Add(record);
        }