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

GetLegend? support

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TI05-delivery/ows_framework/branches/ows_framework-refactor/ows_common/ows_common/pylons/wms_controller.py

    r3571 r3573  
    4444    service = 'WMS' 
    4545    owsOperations = ows_controller.OWSController.owsOperations + ['GetMap', 'GetContext', 
     46                                                                  'GetLegend', 
    4647                                                                  'GetInfo'] 
    4748    validVersions = ['1.1.1'] 
     
    7576        """ 
    7677        ows_controller.addOperation('GetMap', formats=self._pilImageFormats.keys()) 
     78        ows_controller.addOperation('GetContext') 
     79        ows_controller.addOperation('GetLegend', 
     80                                    formats=self._pilImageFormats.keys()) 
    7781        ows_controller.addOperation('GetInfo') 
    7882        log.debug('Loading capabilities contents') 
     
    101105                                   dimensions=dims) 
    102106 
     107            # Stuff that should go in the capabilities tree eventually 
     108            ds.legendSize = layer.legendSize 
     109            ds.legendFormats = self._pilImageFormats.keys() 
     110 
    103111            c.capabilities.contents.datasetSummaries.append(ds) 
    104112 
     113 
     114 
     115    def _getLayerParam(self): 
     116        """ 
     117        Retrieve the layers parameter enforcing the rule of only 
     118        selecting one layer. 
     119 
     120        """ 
     121        layerName = self.getOwsParam('layers') 
     122 
     123        # Select the first layer if several are requested. 
     124        # This plays nicer with mapClient. 
     125        if ',' in layerName: 
     126            layerName = layerName.split(',')[0] 
     127            #raise InvalidParameterValue( 
     128            #    'Multi-layer GetMap requests are not supported', 'layers') 
     129        try: 
     130            layerObj = self.layers[layerName] 
     131        except KeyError: 
     132            raise InvalidParameterValue('Layer %s not found' % layerName, 'layers') 
     133 
     134        return layerName, layerObj 
     135 
     136    def _getFormatParam(self): 
     137        format = self.getOwsParam('format', default='image/png') 
     138        if format not in self._pilImageFormats: 
     139            raise InvalidParameterValue( 
     140                'Format %s not supported' % format, 'format') 
     141 
     142        return format 
     143     
    105144    #------------------------------------------------------------------------- 
    106145    # OWS Operation methods 
     
    118157 
    119158        # Layer handling 
    120         layerName = self.getOwsParam('layers') 
    121         if ',' in layerName: 
    122             raise InvalidParameterValue( 
    123                 'Multi-layer GetMap requests are not supported', 'layers') 
    124         try: 
    125             layerObj = self.layers[layerName] 
    126         except KeyError: 
    127             raise InvalidParameterValue('Layer %s not found' % layerName, 'layers') 
    128  
     159        layerName, layerObj = self._getLayerParam() 
    129160         
    130161        # Coordinate parameters 
     
    239270        return t.generate(c=c).render() 
    240271 
     272    def GetLegend(self): 
     273        """ 
     274        Return an image of the legend. 
     275 
     276        """ 
     277        # Parameters 
     278        layerName, layerObj = self._getLayerParam() 
     279        format = self._getFormatParam() 
     280 
     281        img = layerObj.getLegendImage() 
     282 
     283        buf = StringIO() 
     284        img.save(buf, self._pilImageFormats[format]) 
     285 
     286        response.headers['Content-Type'] = format 
     287        response.write(buf.getvalue()) 
     288 
    241289 
    242290    def GetInfo(self): 
Note: See TracChangeset for help on using the changeset viewer.