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