Changeset 5339


Ignore:
Timestamp:
26/05/09 16:57:00 (10 years ago)
Author:
domlowe
Message:

Fixed problem where cdms sometimes returns numpy floats and sometimes returns transient variables.

Location:
cows/trunk/cows/service/imps
Files:
2 edited

Legend:

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

    r5332 r5339  
    2424import logging 
    2525log = logging.getLogger(__name__) 
     26import numpy 
     27from MA import array 
    2628 
    2729 
     
    379381        self.dx=abs(lon[0]-lon[1]) 
    380382        self.dy=abs(lat[0]-lat[1]) 
    381          
    382         log.info('dx +%s'%self.dx) 
    383         log.info('dy +%s'%self.dy) 
    384          
     383        
    385384        #now do the subset. 
    386385        tvar=v(latitude=(bbox[1], bbox[3]), longitude=(bbox[0],bbox[2]),squeeze=1) 
    387         order=tvar.getOrder() 
    388         #array of data 
    389         self.value=tvar.getValue() 
    390         if order == 'xy': 
     386        self.long_name=v.id 
     387        self.units=v.units 
     388                              
     389        if type(tvar) == numpy.float32: 
     390            order ='xy' 
     391            self.value=numpy.ndarray(tvar) 
    391392            self.ix=0 
    392393            self.iy=1 
    393         else: 
    394             self.ix=1 
    395             self.iy=0 
    396         lat = tvar.getLatitude() 
    397         lon = tvar.getLongitude()   
    398         if lon is not None: 
    399             self.x0=lon[0] 
    400             self.nx=len(lon) 
    401         else: #it's a single longitude value 
    402             self.x0=float(bbox[0]) 
    403             self.nx= 1 
    404          
    405         if lat is not None: 
    406             self.y0=lat[0] 
    407             self.ny=len(lat) 
    408         else: #it's a single latitude value 
    409             self.y0=float(bbox[1]) 
    410             self.ny= 1 
    411          
    412          
    413         self.long_name=tvar.id  #TODO, get long name from feature 
    414         self.units=tvar.units 
     394            self.x0=bbox[0] 
     395            self.y0=bbox[1] 
     396            self.nx=self.ny=1 
     397        else:    #it's a transient variable. 
     398            order=tvar.getOrder() 
     399            #array of data 
     400            self.value=tvar.getValue() 
     401            if order == 'xy': 
     402                self.ix=0 
     403                self.iy=1 
     404            else: 
     405                self.ix=1 
     406                self.iy=0 
     407            lat = tvar.getLatitude() 
     408            lon = tvar.getLongitude()       
     409            if lon is not None: 
     410                self.x0=lon[0] 
     411                self.nx=len(lon) 
     412            else: #it's a single longitude value 
     413                self.x0=bbox[0] 
     414                self.nx= 1       
     415            if lat is not None: 
     416                self.y0=lat[0] 
     417                self.ny=len(lat) 
     418            else: #it's a single latitude value 
     419                self.y0=bbox[1] 
     420                self.ny= 1 
     421 
     422         
  • cows/trunk/cows/service/imps/pywms/render_imp.py

    r5308 r5339  
    4646 
    4747    def renderGrid(self, grid, bbox, width, height, cmap): 
    48         logger.debug('RENDER GRID STARTS HERE') 
    4948        cmap.set_bad('#ffffff', 0.0) 
    5049 
     
    7776        img = img.resize(((abs(pxPerGrid_x * grid.nx), 
    7877                           abs(pxPerGrid_y * grid.ny)))) 
    79  
    8078        #!NO: We assume the grid points represent the centre of the grid boxes 
    8179        #!NO: therefore we can calculate the upper-left position of the image 
     
    121119        """ 
    122120        a = self._norm(grid.value) 
     121         
    123122        img_buf = (cmap(a) * 255).astype('b') 
    124  
    125123        # This code assumes the axis ordering is either (y, x, time) or (x, y, time) 
    126124        if min(grid.iy, grid.ix) != 0 and max(grid.iy, grid.ix) != 1: 
    127125            raise ValueError("X and Y must be the first 2 dimensions!") 
    128  
    129126        if grid.iy < grid.ix: 
    130127            yxOrdering = True 
    131128        else: 
    132129            yxOrdering = False 
    133      
    134         img = Image.frombuffer("RGBA", img_buf.shape[1::-1], img_buf.tostring(), "raw", "RGBA", 0, 1) 
     130             
     131        #fix for extreme zoom errors   
     132        try: 
     133            img = Image.frombuffer("RGBA", img_buf.shape[1::-1], img_buf.tostring(), "raw", "RGBA", 0, 1) 
     134        except ValueError: 
     135            if len(grid.value.shape) == 1:  
     136                imageshape=(grid.value.shape[0], 1)     
     137                img = Image.frombuffer("RGBA", imageshape, img_buf.tostring(), "raw", "RGBA", 0, 1) 
    135138#        img.save('/tmp/raw1.png') 
    136139 
     
    138141        if not yxOrdering: 
    139142            img = img.transpose(Image.ROTATE_90) 
    140  
    141143        # Flip if x or y are ordered the wrong way 
    142144        if grid.dy > 0: 
Note: See TracChangeset for help on using the changeset viewer.