def findvar(fname, name, *args): ''' Locates variable inside grib file Inputs: name, part of variable short name (parameter abbv) args, any string inside variable string representation Example: findvar('file.grib2','temperatue','10 m') ''' G = Grib2Decode(fname) out = [] for g in G: if isPygrib: #if g['parameterName'].lower().find(name.lower())>=0: if g['shortName'].lower() == name: if all([str(g).lower().find(i.lower()) >= 0 for i in args]): out += [g] else: #if g.parameter.lower().find(name.lower())>=0: if g.parameter_abbrev.lower() == name: if all([str(g).lower().find(i.lower()) >= 0 for i in args]): out += [g] return out
def show_all(fname): ''' Lists variables inside grib file ''' G = Grib2Decode(fname) tmp = [] for g in G: if isPygrib: abb = g['shortName'] name = g['parameterName'] level = '' vlevel = str(g['level']) units = g['parameterUnits'] else: abb = g.parameter_abbrev name = g.parameter level = g.vertical_level_descriptor vlevel = g.vertical_level units = g.parameter_units # print '%10s %30s %40s %10s %20s' % (abb.ljust(10),name.ljust(30)[:30],level.ljust(40)[:40],vlevel.ljust(10)[:10],units.ljust(20)[:20]) print '%-10s %-20s %-20s %-10s %-10s' % (abb, name[:20], level[:20], vlevel[:10], units[:10])
def show(fname): # organize variables with same short name: G=Grib2Decode(fname) from collections import OrderedDict vars=OrderedDict() varsn={} for g in G: abb = g['shortName'] if abb in vars.keys(): varsn[abb]+=1 else: vars[abb]=g['parameterName'],str(g['level']),g['parameterUnits'] varsn[abb]=1 print '%-10s %-25s %5s %-10s' % ('','name','n vel','units') for abb in vars.keys(): name,vlevel,units=vars[abb] vlevel=str(varsn[abb]) print '%-10s %-25s %5s %-10s' % (abb,name[:25],vlevel[:10],units[:10])
from grib2 import Grib2Decode import numpy as N # open a GRIB2 file, create a Grib2 class instance. grbs = Grib2Decode('../sampledata/eta.grb') # print an inventory of the file. for g in grbs: print g # extract just geopotential height on isobaric surfaces. zgribs = [ g for g in grbs if g.parameter_abbrev == 'HGT' and g.vertical_level_descriptor == 'Isobaric Surface' ] nlevs = len(zgribs) nlons = zgribs[0].points_in_x_direction nlats = zgribs[0].points_in_y_direction data = N.zeros((nlevs, nlats, nlons), 'f') print # verify we got z on p. for nlev, zg in enumerate(zgribs): if nlev == 0: lats, lons = zg.grid() # get lats and lons of grid print nlev, zg data[nlev] = zg.data() print # plot min/max of data and grid. print data.shape, data.min(), data.max() print lats.shape, lats.min(), lats.max() print lons.shape, lons.min(), lons.max()
from grib2 import Grib2Decode from pylab import * from mpl_toolkits.basemap import Basemap from numpy import ma grbs = Grib2Decode('../sampledata/ds.temp.grb') g = grbs[0] lats, lons = g.grid() data = g.data() print data.dtype print data.shape, lons.shape, lats.shape print data.min(), data.max() llcrnrlon = lons[0, 0] llcrnrlat = lats[0, 0] urcrnrlon = lons[-1, -1] urcrnrlat = lats[-1, -1] rsphere = (grbs[0].earthRmajor, grbs[0].earthRminor) lat_1 = grbs[0].proj4_lat_1 lat_2 = grbs[0].proj4_lat_2 lon_0 = grbs[0].proj4_lon_0 projection = grbs[0].proj4_proj fig = figure() ax = fig.add_axes([0.1, 0.1, 0.75, 0.75]) m = Basemap(llcrnrlon=llcrnrlon, llcrnrlat=llcrnrlat, urcrnrlon=urcrnrlon, urcrnrlat=urcrnrlat, rsphere=rsphere, lon_0=lon_0, lat_1=lat_1, lat_2=lat_2,
from pylab import * from mpl_toolkits.basemap import Basemap from numpy import ma from grib2 import Grib2Decode, dump grbs = Grib2Decode('../sampledata/tigge.grb') for grb in grbs: fld = 0.01*grb.data() # convert to hPa lats,lons = grb.grid() print grb.originating_center, fld.shape, fld.min(), fld.max() fig=figure(figsize=(10,5)) fig.add_axes([0.1,0.1,0.8,0.8]) # setup robinson world map projection. m = Basemap(projection='robin',lon_0=180) x, y = m(lons,lats) levels = arange(475,1101,25) CS = m.contourf(x,y,fld,levels,cmap=cm.jet) colorbar(drawedges=True, shrink=0.8) # draw colorbar m.drawcoastlines() m.drawparallels(arange(-80,81,20),labels=[1,0,0,0]) m.drawmeridians(arange(0,360,60),labels=[0,0,0,1]) m.drawmapboundary() title(grb.parameter+': '+grb.center_wmo_code.upper()+', i.e. '+grb.originating_center,fontsize=12) show()
from pylab import * from mpl_toolkits.basemap import Basemap from numpy import ma from grib2 import Grib2Decode, dump grbs = Grib2Decode('../sampledata/ecmwf_tigge.grb') for g in grbs: if g.parameter_abbrev == 'SOILM': fld = g.data() lats, lons = g.grid() break # stack grids side-by-side (in longitiudinal direction), so # any range of longitudes (between -360 and 360) may be plotted on a world map. lons = concatenate((lons - 360, lons), 1) lats = concatenate((lats, lats), 1) fld = ma.concatenate((fld, fld), 1) # setup miller cylindrical map projection. print lats[0, 0], lats[-1, -1] m = Basemap(llcrnrlon=-180.,llcrnrlat=-90,urcrnrlon=180.,urcrnrlat=90.,\ resolution='l',area_thresh=10000.,projection='mill') x, y = m(lons, lats) CS = m.contourf(x, y, fld, 15, cmap=cm.jet) #im = m.pcolor(x,y,fld,cmap=cm.jet,shading='flat') ax = gca() pos = ax.get_position() l, b, w, h = pos.bounds cax = axes([l + w + 0.025, b, 0.025, h]) # setup colorbar axes colorbar(drawedges=True, cax=cax, format='%g') # draw colorbar axes(ax) # make the original axes current again m.drawcoastlines() # draw parallels
from grib2 import Grib2Decode from pylab import * from mpl_toolkits.basemap import Basemap #grbs = Grib2Decode('../sampledata/gfs.grb') grbs = Grib2Decode('test.grb') for g in grbs: #if g.parameter_abbrev == 'PRES' and g.vertical_level_descriptor == 'Ground or Water Surface': if g.parameter_abbrev == 'SOILW' and g.vertical_level == "0-0.1 m": print g.vertical_level data = g.data() lats,lons = g.grid() break print data.min(), data.max() print lats[:,0] print lons[0,:] llcrnrlon = lons[0,0] llcrnrlat = lats[0,0] urcrnrlon = lons[-1,-1] urcrnrlat = lats[-1,-1] print llcrnrlon,llcrnrlat,urcrnrlon,urcrnrlat m = Basemap(llcrnrlon=llcrnrlon,llcrnrlat=llcrnrlat, urcrnrlon=urcrnrlon,urcrnrlat=urcrnrlat, resolution='c',projection='cyl') m.scatter(lons.flat,lats.flat,1,marker='o',color='k',zorder=10) m.drawcoastlines() x,y = m(lons,lats) m.contourf(x,y,data,15) #m.fillcontinents() title('Global Lat/Lon Grid') show()
from grib2 import Grib2Decode from pylab import * from mpl_toolkits.basemap import Basemap grbs = Grib2Decode('../sampledata/flux.grb') lats, lons = grbs[1].grid() data = grbs[1].data() print lats[:, 0] print lons[0, :] llcrnrlon = lons[0, 0] llcrnrlat = lats[0, 0] urcrnrlon = lons[-1, -1] urcrnrlat = lats[-1, -1] print llcrnrlon, llcrnrlat, urcrnrlon, urcrnrlat m = Basemap(llcrnrlon=llcrnrlon, llcrnrlat=llcrnrlat, urcrnrlon=urcrnrlon, urcrnrlat=urcrnrlat, resolution='c', projection='cyl') m.scatter(lons.flat, lats.flat, 1, marker='o', color='k', zorder=10) x, y = m(lons, lats) m.drawcoastlines() m.contourf(x, y, data, 15) #m.fillcontinents() title('Global Gaussian Grid') show()
from grib2 import Grib2Decode, Grib2Encode import numpy as N # open a GRIB2 file, create a Grib2 class instance. filein = '../sampledata/gfs.grb' print 'input grib file:', filein grbs = Grib2Decode(filein) # open a file for output. fileout = 'test.grb' print 'output grib file:', fileout f = open(fileout, 'wb') # test encoding sxn0, sxn1. print 'message number,field number,bitmap flag,min,max:' print '------------------------------------------------' for nmsg, grb in enumerate(grbs): grbo = Grib2Encode(grb.discipline_code, grb.identification_section) # add grid definition template if hasattr(grb, 'grid_definition_list'): grbo.addgrid(grb.grid_definition_info, grb.grid_definition_template, deflist=grb.grid_definition_list) else: grbo.addgrid(grb.grid_definition_info, grb.grid_definition_template) field = grb.data() bitmapflag = grb.bitmap_indicator_flag if bitmapflag == 0: bitmap = grb._bitmap else: bitmap = None if bitmap is not None: fieldcompress = N.compress(N.ravel(bitmap), N.ravel(field)) fieldmin = fieldcompress.min()
from grib2 import Grib2Decode from pylab import * from mpl_toolkits.basemap import Basemap grbs = Grib2Decode('../sampledata/ngm.grb') for g in grbs: if g.parameter_abbrev == 'PRES' and g.vertical_level_descriptor == 'Ground or Water Surface': data = g.data() lats, lons = g.grid() break print lats.min(), lats.max() print lons.min(), lons.max() print lats[0, 0], lons[0, 0] print lats[-1, -1], lons[-1, -1] llcrnrlon = lons[0, 0] llcrnrlat = lats[0, 0] urcrnrlon = lons[-1, -1] urcrnrlat = lats[-1, -1] rsphere = (grbs[0].earthRmajor, grbs[0].earthRminor) lat_ts = grbs[0].proj4_lat_ts lon_0 = grbs[0].proj4_lon_0 lat_0 = grbs[0].proj4_lat_0 projection = grbs[0].proj4_proj m = Basemap(llcrnrlon=llcrnrlon, llcrnrlat=llcrnrlat, urcrnrlon=urcrnrlon, urcrnrlat=urcrnrlat, rsphere=rsphere, lon_0=lon_0, lat_ts=lat_ts, lat_0=lat_0, resolution='l',
from grib2 import Grib2Decode from pylab import * from numpy import ma from mpl_toolkits.basemap import Basemap, cm grbs = Grib2Decode('../sampledata/eumetsat_precip.grb') g = grbs[0] fld = g.data() lats, lons = g.grid() m = Basemap(lon_0=g.proj4_lon_0,satellite_height=g.proj4_h,\ rsphere = (g.earthRmajor,g.earthRminor),\ resolution='l',area_thresh=10000.,projection='geos') # plot every 50th point. x, y = m(lons, lats) m.scatter(x[::50, ::50].flat, y[::50, ::50].flat, 1, marker='o', color='k', zorder=10) m.drawcoastlines() m.drawcountries() #m.fillcontinents(color='coral') m.drawcoastlines() # contour data. m.contourf(x, y, fld, 20) # pcolor image (slower) #m.pcolor(x,y,fld) m.drawparallels(arange(-80, 81, 20)) m.drawmeridians(arange(-90, 90, 20))