Changeset 5365


Ignore:
Timestamp:
08/06/09 16:05:40 (10 years ago)
Author:
domlowe
Message:

Changes to cows csml backend to render wms legend bar.

Location:
cows/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • cows/trunk/cows/service/imps/csmlbackend/wms_csmllayer.py

    r5339 r5365  
    2626import numpy 
    2727from MA import array 
    28  
     28import Image, ImageFont, ImageDraw 
    2929 
    3030from cows.service.wms_iface import IwmsLayer, IwmsDimension, IwmsLayerSlab 
     
    4949 
    5050        title, abstract = super(CSMLwmsLayerMapper, self).getInfo(feature) 
    51         units=feature.getDomainUnits() 
     51        units=feature.getDomainUnits()   
    5252        dimensions={} 
    5353        tmpunits=copy(units) 
     
    6262        if 'EPSG:4326' in crss: 
    6363            crss.append('CRS:84') 
    64             crss.append('WGS84') 
     64            crss.append('WGS84')         
     65        #the units to return are the units of measure. 
     66        try: 
     67            units=feature.value.rangeSet.valueArray.valueComponent.uom 
     68        except: 
     69            units='unknown units' 
    6570        return title, abstract, dimensions, units, crss 
    6671        
     
    115120        self.crss=crss 
    116121        self._feature=feature 
    117         self.legendSize=(30,100) 
     122        self.legendSize=(630,80) 
     123        self._minval=0 
     124        self._maxval=10.0 #dummy values  
    118125        try:  
    119126            bb = self._feature.getCSMLBoundingBox().getBox() 
     
    179186            os.system('rm %s'%result[1]) 
    180187            bbox=self.getBBox(crs) 
    181             return CSMLwmsLayerSlab(netcdf, self, crs, dimValues, renderOpts, bbox) 
     188            slab = CSMLwmsLayerSlab(netcdf, self, crs, dimValues, renderOpts, bbox) 
     189            self._minval=slab.minval #needed for legend rendering. 
     190            self._maxval=slab.maxval 
     191            return slab 
    182192        else: 
    183193            raise NotImplementedError 
     
    262272        return value 
    263273 
    264  
     274    def getLegendImage(self, orientation='horizontal', renderOpts={}): 
     275        """ 
     276        Create an image of the colourbar for this layer. 
     277        @param orientation: Either 'vertical' or 'horizontal' 
     278        @return: A PIL image with labels  
     279 
     280        """ 
     281        width = self.legendSize[0] 
     282        height = self.legendSize[1] 
     283        # if width and height specified in the GetLegend request parameters 
     284        # then use them instead of the default values 
     285        if 'width' in renderOpts: 
     286                width = renderOpts['width'] 
     287        if 'height' in renderOpts: 
     288                height = renderOpts['height'] 
     289        cmap = cm.get_cmap(config['colourmap']) 
     290        renderer=RGBARenderer(self._minval, self._maxval) 
     291         
     292        if orientation =='vertical': 
     293            legendImage= renderer.renderColourbar(630, 30, cmap, isVertical=True) 
     294        else: 
     295            legendImage= renderer.renderColourbar(630, 30, cmap, isVertical=False)        
     296        imageWithLabels=Image.new('RGBA', (630, 80), "white") 
     297        imageWithLabels.paste(legendImage, (0,0)) 
     298        #add minvalue label 
     299        minvalueImg=self._simpletxt2image(str(self._minval), (49,25)) 
     300        imageWithLabels.paste(minvalueImg,(0,40)) 
     301        #add midvalue  label 
     302        midvalue=self._minval+(self._maxval-self._minval)/2 
     303        #add maxvalue label 
     304        midvalueImg=self._simpletxt2image(str(midvalue),(49,25)) 
     305        imageWithLabels.paste(midvalueImg,(280,40)) 
     306        #add maxvalue label 
     307        maxvalueImg=self._simpletxt2image(str(self._maxval), (49,25)) 
     308        imageWithLabels.paste(maxvalueImg,(575,40)) 
     309        #add units: 
     310        unitsImg=self._simpletxt2image('Units of measure: %s'%str(self.units), (200,25)) 
     311        imageWithLabels.paste(unitsImg,(240,65))      
     312#        return imageWithLabels                          
     313        return imageWithLabels.resize((width, height))  
     314     
     315    def _simpletxt2image(self, text, size): 
     316        image = Image.new('RGBA',size,"white") 
     317        ifo = ImageFont.truetype("/usr/share/fonts/truetype/msttcorefonts/arial.ttf",16) 
     318        draw = ImageDraw.Draw(image) 
     319        draw.text((0, 0), text, font=ifo,fill=(100, 123, 165)) 
     320        return image 
     321  
     322     
     323     
     324     
    265325class CSMLwmsDimension(IwmsDimension): 
    266326    """ 
  • cows/trunk/cows/service/imps/pywms/render_imp.py

    r5339 r5365  
    3232 
    3333    def renderColourbar(self, width, height, cmap, isVertical=True): 
    34         a = N.arrayrange(0, 1.0, 1.0/256) 
     34        a = N.arange(0, 1.0, 1.0/256) 
    3535        if isVertical: 
    3636            a = a[-1::-1] 
     
    3838        else: 
    3939            shape = (256, 1) 
    40  
    4140        cbar = (cmap(a) * 255).astype('b').tostring() 
    4241        img = Image.frombuffer("RGBA", shape, cbar, "raw", "RGBA", 0, 1) 
    4342        img = img.resize((width, height)) 
    44  
    4543        return img 
    4644 
     
    150148        return img 
    151149 
    152  
    153 #--------------------------------------------------------------------------------- 
    154  
  • cows/trunk/setup.py

    r5309 r5365  
    33setup( 
    44    name='cows', 
    5     version='0.2.6', 
     5    version='0.2.8', 
    66     
    77    description='CEDA OGC Web Services Framework (COWS).  A framework for creatining integrated OGC web services using Pylons', 
Note: See TracChangeset for help on using the changeset viewer.