;+ ; @file_comments ; ; @categories ; ; @param NUM ; ; @param RECSTART ; ; @returns ; ; @restrictions ; ; @examples ; ; @history ; ; @version ; $Id$ ;- FUNCTION read_grib_gds, num, recstart ; compile_opt idl2, strictarrsubs ; offset = recstart+8 a = assoc(num, bytarr(1, /nozero), offset-1) sizepds = bit2int([binary(a[1]), binary(a[2]), binary(a[3])]) ; offset = recstart+8+sizepds a = assoc(num, bytarr(1, /nozero), offset-1) ; sizegds = bit2int([binary(a[1]), binary(a[2]), binary(a[3])]) ; nv = (a[4])[0] pv = (a[5])[0] ; gridtype = (a[6])[0] ; CASE 1 OF ; Latitude/Longitude Grid ; Gaussian Latitude/Longitude Grid gridtype EQ 0 OR gridtype EQ 4:BEGIN ni = bit2int([binary(a[7]), binary(a[8])]) nj = bit2int([binary(a[9]), binary(a[10])]) ; la1 = bit2int([binary(a[11]), binary(a[12]), binary(a[13])], /checkneg)/1000. lo1 = bit2int([binary(a[14]), binary(a[15]), binary(a[16])], /checkneg)/1000. ; resflags = binary(a[17]) ; la2 = bit2int([binary(a[18]), binary(a[19]), binary(a[20])], /checkneg)/1000. lo2 = bit2int([binary(a[21]), binary(a[22]), binary(a[23])], /checkneg)/1000. ; di = bit2int([binary(a[24]), binary(a[25])])/1000. IF di EQ 65.5350 THEN di = -1 ; IF gridtype EQ 0 THEN BEGIN dj = bit2int([binary(a[26]), binary(a[27])])/1000. IF dj EQ 65.5350 THEN dj = -1 ENDIF ELSE BEGIN n = bit2int([binary(a[26]), binary(a[27])]) ENDELSE ; scanflags = binary(a[28]) ; res = {size:sizegds, gridtype:gridtype, ni:ni, nj:nj, la1:la1, la2:la2, lo1:lo1, lo2:lo2, di:di} IF gridtype EQ 0 THEN res = create_struct(res, 'dj', dj) $ ELSE res = create_struct(res, 'n', n) RETURN, res END ; Mercator Projection Grid gridtype EQ 1: ; Gnomonic Projection Grid gridtype EQ 2: ; Lambert Conformal, secant or tangent, conical or bipolar (normal or ; oblique) Projection Grid gridtype EQ 3: ; Polar Stereographic Projection Grid gridtype EQ 5: ; Oblique Lambert conformal, secant or tangent, conical or bipolar, ; projection gridtype EQ 13: ; Spherical Harmonic Coefficients gridtype EQ 50: ; Space view perspective or orthographic grid gridtype EQ 90: ; reserved - see Manual on Codes ELSE: ENDCASE ; RETURN, -1 END