Beispiel #1
0
        private bool ReadHeader(byte[] headerBuffer, GridTable table)
        {
            var ll = new PhiLambda
            {
                Phi    = GetBigEndianDouble(headerBuffer, 4 * 16 + 8),
                Lambda = -GetBigEndianDouble(headerBuffer, 7 * 16 + 8)
            };

            var ur = new PhiLambda
            {
                Phi    = GetBigEndianDouble(headerBuffer, 5 * 16 + 8),
                Lambda = -GetBigEndianDouble(headerBuffer, 6 * 16 + 8)
            };

            var cs = new PhiLambda
            {
                Phi    = GetBigEndianDouble(headerBuffer, 8 * 16 + 8),
                Lambda = -GetBigEndianDouble(headerBuffer, 9 * 16 + 8)
            };

            table.NumLambdas = (int)(Math.Abs(ur.Lambda - ll.Lambda) / cs.Lambda + .5) + 1;
            table.NumPhis    = (int)(Math.Abs(ur.Phi - ll.Phi) / cs.Phi + .5) + 1;

            table.LowerLeft      = PhiLambda.DegreesToRadians(ll);
            table.UpperRight     = PhiLambda.DegreesToRadians(ur);
            table.SizeOfGridCell = PhiLambda.DegreesToRadians(cs);

            return(true);
        }
        internal override bool ReadHeader(GridTable table)
        {
            using (var stream = OpenGridTableStream())
            {
                var header = new byte[176];
                if (stream.Read(header, 0, 176) != 176)
                {
                    return(false);
                }

                table.LowerLeft = new PhiLambda
                {
                    Phi    = GetBigEndianDouble(header, 24),
                    Lambda = -GetBigEndianDouble(header, 72)
                };

                table.UpperRight = new PhiLambda
                {
                    Phi    = GetBigEndianDouble(header, 40),
                    Lambda = -GetBigEndianDouble(header, 56)
                };

                table.SizeOfGridCell = new PhiLambda
                {
                    Phi    = GetBigEndianDouble(header, 88),
                    Lambda = -GetBigEndianDouble(header, 104)
                };

                var size = table.UpperRight - table.LowerLeft;
                table.NumLambdas = (int)(Math.Abs(size.Lambda) / table.SizeOfGridCell.Lambda + 0.5) + 1;
                table.NumPhis    = (int)(Math.Abs(size.Phi) / table.SizeOfGridCell.Phi + 0.5) + 1;

                table.LowerLeft      = PhiLambda.DegreesToRadians(table.LowerLeft);
                table.UpperRight     = PhiLambda.DegreesToRadians(table.UpperRight);
                table.SizeOfGridCell = PhiLambda.DegreesToRadians(table.SizeOfGridCell);

                return(true);
            }
        }
Beispiel #3
0
        /// <summary>
        /// Parses the grid table header and returns an appropriate <see cref="GridTable"/>
        /// </summary>
        /// <param name="table">The grid tabel to initialize</param>
        /// <returns>true if the header could be read.</returns>
        internal override bool ReadHeader(GridTable table)
        {
            using (var br = new BinaryReader(OpenGridTableStream()))
            {
                br.BaseStream.Seek(64, SeekOrigin.Current);

                table.NumLambdas = br.ReadInt32();
                table.NumPhis    = br.ReadInt32();
                br.ReadBytes(4);

                PhiLambda ll, cs;
                ll.Lambda = br.ReadSingle();
                cs.Lambda = br.ReadSingle();
                ll.Phi    = br.ReadSingle();
                cs.Phi    = br.ReadSingle();

                table.LowerLeft      = PhiLambda.DegreesToRadians(ll);
                table.SizeOfGridCell = PhiLambda.DegreesToRadians(cs);
                table.UpperRight     = ll + cs.Times(table.NumPhis, table.NumLambdas);

                return(true);
            }
        }