Changeset 3572


Ignore:
Timestamp:
10/03/08 16:40:11 (11 years ago)
Author:
spascoe
Message:

GetLegend? support

Location:
DPPP/ukcip02_server/trunk/ukcip_server/ukcip_server/model
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • DPPP/ukcip02_server/trunk/ukcip_server/ukcip_server/model/pywms/impl.py

    r3570 r3572  
    1111from render_imp import RGBARenderer 
    1212from matplotlib.cm import get_cmap 
     13from matplotlib.colorbar import ColorbarBase 
     14from matplotlib.ticker import LinearLocator 
     15from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas 
     16from matplotlib.figure import Figure 
     17from numpy import arange 
     18 
     19from cStringIO import StringIO 
     20import Image 
    1321 
    1422import logging 
     
    2230 
    2331    """ 
    24     def __init__(self, cdmsVar, GridClass=CdmsGrid, minValue=None, maxValue=None): 
     32    def __init__(self, cdmsVar, GridClass=CdmsGrid, minValue=None, maxValue=None, 
     33                 units=None): 
    2534        try: 
    2635            self.title = cdmsVar.long_name 
     
    3140        self.abstract = None 
    3241        self.crss = [GridClass.crs] 
    33         self.units = self._layer.units 
     42        if units: 
     43            self.units = units 
     44        else: 
     45            self.units = self._layer.units 
    3446        self.minValue = minValue 
    3547        self.maxValue = maxValue 
     48 
     49        self.legendSize=(100, 500) 
    3650 
    3751        dims = {} 
     
    6074        # Don't support caching 
    6175        return None 
     76 
     77    def getLegendImage(self, orientation='vertical', renderOpts={}): 
     78        if 'vert' in orientation: 
     79            figsize = (1, 5) 
     80            rect = (0.05, 0.05, 0.4, 0.9) 
     81        else: 
     82            figsize = (5, 1) 
     83            rect = (0.05, 0.55, 0.9, 0.4) 
     84             
     85         
     86        fig = Figure(figsize=figsize, dpi=100) 
     87        ax = fig.add_axes(rect) 
     88        boundaries = arange(self.minValue, self.maxValue, 
     89                           float(self.maxValue-self.minValue)/256) 
     90        loc = LinearLocator() 
     91        loc.set_bounds(self.minValue, self.maxValue) 
     92        ColorbarBase(ax, boundaries=boundaries, orientation=orientation, ticks=loc()) 
     93 
     94        if 'vert' in orientation: 
     95            ax.set_ylabel(self.units) 
     96        else: 
     97            ax.set_xlabel(self.units) 
     98 
     99        c = FigureCanvas(fig) 
     100        c.draw() 
     101        buf = StringIO() 
     102        c.print_png(buf) 
     103        buf.seek(0) 
     104        img = Image.open(buf) 
     105 
     106        return img 
    62107 
    63108class CdmsLayerSlab(ILayerSlab): 
  • DPPP/ukcip02_server/trunk/ukcip_server/ukcip_server/model/ukcip02.py

    r3568 r3572  
    2424    'mean_temp': (-8.0, 22.0) 
    2525    } 
     26units = { 
     27    'rainfall': 'mm', 
     28    'rain_days': 'days', 
     29    'mean_temp': 'celcius' 
     30    } 
    2631 
    2732class UKCIP02LayerMapper(ILayerMapper): 
     
    4045            layers[varName] = CdmsLayer(ds[varName], GridClass=CdmsBNGGrid, 
    4146                                        minValue=ranges[varName][0], 
    42                                         maxValue=ranges[varName][1]) 
     47                                        maxValue=ranges[varName][1], 
     48                                        units=units[varName]) 
    4349 
    4450        return layers 
Note: See TracChangeset for help on using the changeset viewer.