Changeset 5511


Ignore:
Timestamp:
24/07/09 11:43:26 (10 years ago)
Author:
domlowe
Message:

csml wms layer returns empty image if there is no data for a region (avoids pink tiles))

File:
1 edited

Legend:

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

    r5399 r5511  
    3131from cows.service.wms_iface import IwmsLayer, IwmsDimension, IwmsLayerSlab 
    3232from cows.service.imps.csmlbackend.csmlcommon import CSMLLayerMapper, CSMLConnector 
    33  
     33import Image 
    3434 
    3535class CSMLwmsLayerMapper(CSMLLayerMapper): 
     
    405405 
    406406        grid=Grid(self.layer, self._netcdf, bbox, width, height) 
     407        #If there is no data for the requested area, return a blank image: 
     408        #TODO this should be included in the overhauled rendering code 
     409        if grid.ok ==False: 
     410            width=abs(width) 
     411            height=abs(height) 
     412            img = numpy.empty((width,height),numpy.uint32) 
     413            img.shape=height, width 
     414            pilImage = Image.frombuffer('RGBA',(width,height),img,'raw','RGBA',0,1) 
     415            return pilImage 
    407416        #how to handle varmin,varmax? ..read array? 
    408417        #minval, maxval=genutil.minmax(grid.value) 
     
    443452        self.dx=abs(lon[0]-lon[1]) 
    444453        self.dy=abs(lat[0]-lat[1]) 
    445         
    446         #now do the subset. 
    447         tvar=v(latitude=(bbox[1], bbox[3]), longitude=(bbox[0],bbox[2]),squeeze=1) 
    448454        self.long_name=v.id 
    449455        self.units=v.units 
    450                               
    451         if type(tvar) == numpy.float32: 
    452             order ='xy' 
    453             self.value=numpy.ndarray(tvar) 
    454             self.ix=0 
    455             self.iy=1 
    456             self.x0=bbox[0] 
    457             self.y0=bbox[1] 
    458             self.nx=self.ny=1 
    459         else:    #it's a transient variable. 
    460             order=tvar.getOrder() 
    461             #array of data 
    462             self.value=tvar.getValue() 
    463             if order == 'xy': 
     456        #now do the subset. 
     457        try: 
     458            tvar=v(latitude=(bbox[1], bbox[3]), longitude=(bbox[0],bbox[2]),squeeze=1)      
     459            if type(tvar) == numpy.float32: 
     460                order ='xy' 
     461                self.value=numpy.ndarray(tvar) 
    464462                self.ix=0 
    465463                self.iy=1 
    466             else: 
    467                 self.ix=1 
    468                 self.iy=0 
    469             lat = tvar.getLatitude() 
    470             lon = tvar.getLongitude()       
    471             if lon is not None: 
    472                 self.x0=lon[0] 
    473                 self.nx=len(lon) 
    474             else: #it's a single longitude value 
    475464                self.x0=bbox[0] 
    476                 self.nx= 1       
    477             if lat is not None: 
    478                 self.y0=lat[0] 
    479                 self.ny=len(lat) 
    480             else: #it's a single latitude value 
    481465                self.y0=bbox[1] 
    482                 self.ny= 1 
    483  
    484          
     466                self.nx=self.ny=1 
     467            else:    #it's a transient variable. 
     468                order=tvar.getOrder() 
     469                #array of data 
     470                self.value=tvar.getValue() 
     471                if order == 'xy': 
     472                    self.ix=0 
     473                    self.iy=1 
     474                else: 
     475                    self.ix=1 
     476                    self.iy=0 
     477                lat = tvar.getLatitude() 
     478                lon = tvar.getLongitude()       
     479                if lon is not None: 
     480                    self.x0=lon[0] 
     481                    self.nx=len(lon) 
     482                else: #it's a single longitude value 
     483                    self.x0=bbox[0] 
     484                    self.nx= 1       
     485                if lat is not None: 
     486                    self.y0=lat[0] 
     487                    self.ny=len(lat) 
     488                else: #it's a single latitude value 
     489                    self.y0=bbox[1] 
     490                    self.ny= 1 
     491                self.ok=True #the grid is correctly initialised 
     492        except cdms.CDMSError: 
     493            self.ok=False #the grid failed due to a cdms error (most likely data not available for bounding box) 
     494             
     495         
Note: See TracChangeset for help on using the changeset viewer.