Ignore:
Timestamp:
11/02/08 17:12:10 (13 years ago)
Author:
spascoe
Message:

Basic GetMap? works. No GetCapabilities? yet.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • DPPP/ukcip02_server/trunk/ukcip_server/ukcip_server/controllers/ukcip_wms.py

    r3367 r3371  
    11import logging 
     2from cStringIO import StringIO 
     3 
     4from matplotlib.cm import get_cmap 
    25 
    36from ows_common.pylons.ows_controller import OwsController 
     
    710from ukcip_server.lib.base import * 
    811from ukcip_server.model.pywms.wms_cdms import SimpleCdmsLayer  
     12from ukcip_server.model.pywms.render_imp import RGBARenderer 
    913 
    1014log = logging.getLogger(__name__) 
     
    1418    # Overriding OwsController class attributes 
    1519    validVersions = ['1.1.1'] 
    16  
    17     def index(self): 
    18         return 'UKCIP WMS controller' 
    1920 
    2021 
     
    2829        raise NotImplementedError 
    2930 
    30     @ows_operation(['version', 'layers', 'styles', 'srs', 'bbox', 
    31                     'width', 'height', 'format'], 
    32                    ['transparent', 'bgcolor', 'exceptions', 'time']) 
    33     def GetMap(self, file, version, layers, styles, srs, bbox, width, height, format, 
    34                transparent='FALSE', bgcolor='0xFFFFFF', exceptions='text/xml', 
    35                time=None): 
     31    @ows_operation 
     32    def GetMap(self): 
    3633 
     34        # Housekeeping 
     35        version = self.getOwsParam('version', default=self.validVersions[0]) 
    3736        if version not in self.validVersions: 
    38             raise InvalidParameterValue('Version %s not supported' % version, 'version') 
     37            raise InvalidParameterValue('Version %s not supported' % version, 
     38                                        'version') 
     39        styles = self.getOwsParam('styles', default='') 
     40        transparent = self.getOwsParam('transparent', default='FALSE') 
     41        bgcolor = self.getOwsParam('bgcolor', default='0xFFFFFF') 
     42                 
     43        # Coordinate parameters 
     44        bbox = tuple(float(x) for x in self.getOwsParam('bbox').split(',')) 
     45        width = int(self.getOwsParam('width')) 
     46        height = int(self.getOwsParam('height')) 
     47        srs = self.getOwsParam('srs') 
     48        if srs != 'EPSG:4326': 
     49            raise InvalidParameterValue('SRS %s not supported' % srs, 
     50                                              'srs') 
    3951 
     52 
     53        # Layer handling 
     54        layer = self.getOwsParam('layers') 
     55        if ',' in layer: 
     56            raise InvalidParameterValue( 
     57                'Multi-layer GetMap requests are not supported', 'layers') 
     58        try: 
     59            layerObj = g.ukcip02_layers[layer] 
     60        except KeyError: 
     61            raise InvalidParameterValue('Layer %s not found' % layer, 'layers') 
     62 
     63        # Get format and create a renderer 
     64        format = self.getOwsParam('format') 
     65        renderer = RGBARenderer(layerObj.minValue, layerObj.maxValue) 
     66        if format != renderer.mimeType: 
     67            raise InvalidParameterValue( 
     68                'Format %s not supported' % format, 'format') 
     69 
     70 
     71        # Dimension handling 
     72        dims = dict(time=self.getOwsParam('time')) 
     73 
     74 
     75        # The real work 
     76        grid = layerObj.selectGrid(bbox, dims) 
     77        img = renderer.renderGrid(grid, bbox, width, height, cmap=get_cmap()) 
     78 
     79        # IE < 7 doesn't display the alpha layer right.  Here we sniff the 
     80        # user agent and remove the alpha layer if necessary. 
     81        try: 
     82            ua = request.headers['User-Agent'] 
     83        except: 
     84            pass 
     85        else: 
     86            if 'MSIE' in ua and 'MSIE 7' not in ua: 
     87                img = img.convert('RGB') 
     88 
     89        buf = StringIO() 
     90        img.save(buf, 'PNG') 
     91 
     92        response.headers['Content-Type'] = renderer.mimeType 
     93        response.write(buf.getvalue()) 
     94 
     95        return request 
     96 
     97    @ows_operation 
     98    def GetInfo(self): 
     99        from pprint import pformat 
     100        request.headers['Content-Type'] = 'text/ascii' 
     101        response.write('Some info about this service\n') 
     102        for layer in g.ukcip02_layers: 
     103            response.write('Layer %s: %s\n' % (layer, pformat(g.ukcip02_layers[layer].__dict__))) 
     104 
     105             
Note: See TracChangeset for help on using the changeset viewer.