[157] | 1 | ;+ |
---|
[495] | 2 | ; @file_comments |
---|
| 3 | ; |
---|
[157] | 4 | ; @categories |
---|
| 5 | ; |
---|
[495] | 6 | ; @param NUM |
---|
[157] | 7 | ; |
---|
| 8 | ; @param RECSTART |
---|
| 9 | ; |
---|
| 10 | ; @returns |
---|
[495] | 11 | ; |
---|
[157] | 12 | ; @restrictions |
---|
[495] | 13 | ; |
---|
[157] | 14 | ; @examples |
---|
| 15 | ; |
---|
| 16 | ; @history |
---|
| 17 | ; |
---|
| 18 | ; @version |
---|
| 19 | ; $Id$ |
---|
| 20 | ;- |
---|
[67] | 21 | FUNCTION read_grib_gds, num, recstart |
---|
| 22 | ; |
---|
[114] | 23 | compile_opt idl2, strictarrsubs |
---|
| 24 | ; |
---|
[67] | 25 | offset = recstart+8 |
---|
| 26 | a = assoc(num, bytarr(1, /nozero), offset-1) |
---|
| 27 | sizepds = bit2int([binary(a[1]), binary(a[2]), binary(a[3])]) |
---|
| 28 | ; |
---|
| 29 | offset = recstart+8+sizepds |
---|
| 30 | a = assoc(num, bytarr(1, /nozero), offset-1) |
---|
| 31 | ; |
---|
| 32 | sizegds = bit2int([binary(a[1]), binary(a[2]), binary(a[3])]) |
---|
[495] | 33 | ; |
---|
[67] | 34 | nv = (a[4])[0] |
---|
| 35 | pv = (a[5])[0] |
---|
| 36 | ; |
---|
| 37 | gridtype = (a[6])[0] |
---|
| 38 | ; |
---|
| 39 | CASE 1 OF |
---|
| 40 | ; Latitude/Longitude Grid |
---|
| 41 | ; Gaussian Latitude/Longitude Grid |
---|
| 42 | gridtype EQ 0 OR gridtype EQ 4:BEGIN |
---|
| 43 | ni = bit2int([binary(a[7]), binary(a[8])]) |
---|
| 44 | nj = bit2int([binary(a[9]), binary(a[10])]) |
---|
| 45 | ; |
---|
| 46 | la1 = bit2int([binary(a[11]), binary(a[12]), binary(a[13])], /checkneg)/1000. |
---|
| 47 | lo1 = bit2int([binary(a[14]), binary(a[15]), binary(a[16])], /checkneg)/1000. |
---|
| 48 | ; |
---|
| 49 | resflags = binary(a[17]) |
---|
| 50 | ; |
---|
| 51 | la2 = bit2int([binary(a[18]), binary(a[19]), binary(a[20])], /checkneg)/1000. |
---|
| 52 | lo2 = bit2int([binary(a[21]), binary(a[22]), binary(a[23])], /checkneg)/1000. |
---|
| 53 | ; |
---|
| 54 | di = bit2int([binary(a[24]), binary(a[25])])/1000. |
---|
| 55 | IF di EQ 65.5350 THEN di = -1 |
---|
| 56 | ; |
---|
| 57 | IF gridtype EQ 0 THEN BEGIN |
---|
| 58 | dj = bit2int([binary(a[26]), binary(a[27])])/1000. |
---|
| 59 | IF dj EQ 65.5350 THEN dj = -1 |
---|
| 60 | ENDIF ELSE BEGIN |
---|
| 61 | n = bit2int([binary(a[26]), binary(a[27])]) |
---|
| 62 | ENDELSE |
---|
| 63 | ; |
---|
| 64 | scanflags = binary(a[28]) |
---|
| 65 | ; |
---|
| 66 | res = {size:sizegds, gridtype:gridtype, ni:ni, nj:nj, la1:la1, la2:la2, lo1:lo1, lo2:lo2, di:di} |
---|
| 67 | IF gridtype EQ 0 THEN res = create_struct(res, 'dj', dj) $ |
---|
| 68 | ELSE res = create_struct(res, 'n', n) |
---|
| 69 | RETURN, res |
---|
| 70 | END |
---|
| 71 | ; Mercator Projection Grid |
---|
| 72 | gridtype EQ 1: |
---|
| 73 | ; Gnomonic Projection Grid |
---|
| 74 | gridtype EQ 2: |
---|
| 75 | ; Lambert Conformal, secant or tangent, conical or bipolar (normal or |
---|
[495] | 76 | ; oblique) Projection Grid |
---|
[67] | 77 | gridtype EQ 3: |
---|
| 78 | ; Polar Stereographic Projection Grid |
---|
| 79 | gridtype EQ 5: |
---|
| 80 | ; Oblique Lambert conformal, secant or tangent, conical or bipolar, |
---|
| 81 | ; projection |
---|
| 82 | gridtype EQ 13: |
---|
| 83 | ; Spherical Harmonic Coefficients |
---|
| 84 | gridtype EQ 50: |
---|
| 85 | ; Space view perspective or orthographic grid |
---|
| 86 | gridtype EQ 90: |
---|
| 87 | ; reserved - see Manual on Codes |
---|
| 88 | ELSE: |
---|
| 89 | ENDCASE |
---|
| 90 | ; |
---|
| 91 | RETURN, -1 |
---|
| 92 | END |
---|