Ignore:
Timestamp:
29/07/09 11:29:16 (10 years ago)
Author:
pnorton
Message:

Improved the coast WMS controller so that it now returns a getCapabilities response.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • qesdi/wms_ddc_vis/trunk/lib/wms_ddc_vis/controllers/coastwms.py

    r5479 r5535  
    33import thread 
    44import re 
     5import simplejson as json 
     6 
    57from StringIO import StringIO 
    68from sets import Set 
     
    1921from geoplot.layer_drawer_coastline import LayerDrawerCoastlines 
    2022 
     23from cows.model.wms import Style, LegendURL, FormattedURL, MetadataURL 
     24from cows.xml.iso19115_subset import OnlineResource 
     25 
    2126log = logging.getLogger(__name__) 
    2227 
     
    3843    service = 'WMS' 
    3944    owsOperations = (ows_controller.OWSController.owsOperations + 
    40         ['GetMap', 'GetContext', 'GetLegend', 'GetFeatureInfo', 'GetInfo']) 
     45        ['GetMap', 'GetContext', 'GetLegend', 'GetFeatureInfo', 'GetInfo', 'GetDisplayOptions']) 
     46     
    4147    validVersions = ['1.1.1', '1.3.0'] 
    4248 
     
    7278        log.debug('Loading capabilities contents') 
    7379        c.capabilities.contents = Contents() 
    74         for layerName, layer in self.layers.items(): 
     80         
     81         
     82        layers = ( ('c', 'coarse', 'coarse detail'),  
     83                   ('l', 'low', 'low detail'),  
     84                   ('i', 'intermediate', 'intermediate detail'), 
     85                   ('h', 'high', 'high detail'), 
     86                   ('f', 'full', 'full detail'),) 
     87         
     88         
     89        for layerName, title,  abstract in layers: 
    7590            log.debug('LayerName: %s' % layerName) 
    7691            log.debug('Loading layer %s' % layerName) 
    7792 
    78             wgs84BBox = WGS84BoundingBox(layer.wgs84BBox[:2], 
    79                                          layer.wgs84BBox[2:]) 
     93            wgs84BBox = WGS84BoundingBox((-180,-90), (180,90)) 
     94 
    8095            # Get CRS/BBOX pairs 
    8196            bboxObjs = [] 
    82             for crs in layer.crss: 
    83                 bbox = layer.getBBox(crs) 
     97            for crs in ('EPSG:4326', 'CRS:84', 'WGS84'): 
     98                bbox = [-180,-90,180,90] 
    8499                bboxObjs.append(BoundingBox(bbox[:2], bbox[2:], crs=crs)) 
    85             # Get dimensions 
    86             dims = {} 
    87             for dimName, dim in layer.dimensions.items(): 
    88                 dimParam = self._mapDimToParam(dimName) 
    89                 dims[dimParam] = Dimension(valuesUnit=dim.units, 
    90                                           unitSymbol=dim.units, 
    91                                           possibleValues= 
    92                                             PossibleValues.fromAllowedValues(dim.extent)) 
    93             # Does the layer implement GetFeatureInfo? 
    94             if layer.featureInfoFormats: 
    95                 queryable = True 
    96                 featureInfoFormats.union_update(layer.featureInfoFormats) 
    97             else: 
    98                 queryable = False 
     100                 
     101 
    99102                 
    100103            #URL to WCS - uses named route 'wcsroute' 
    101104            #TODO: Allow for a WCS blacklist to opt out of providing dataurls for certain datasets? 
    102105            #TODO: How to make this more configurable - what if WCS is not coupled with WMS? 
    103             try: 
    104                 version='1.0.0' #wcs version 
    105                 wcsbaseurl=url_for('wcsroute', fileoruri=c.fileoruri,qualified=True)+'?' 
    106                 dataURLs=[DataURL(format='WCS:CoverageDescription', onlineResource='%sService=WCS&Request=DescribeCoverage&Coverage=%s&Version=%s'%(wcsbaseurl, layerName, version))] 
    107             except GenerationException: 
    108                 log.info("dataURLs not populated: could not generate WCS url with url_for('wcsroute', filedoruri=%s,qualified=True)"%c.fileoruri) 
    109                 dataURLs=[] 
     106#            try: 
     107#                version='1.0.0' #wcs version 
     108#                wcsbaseurl=url_for('wcsroute', fileoruri=c.fileoruri,qualified=True)+'?' 
     109#                dataURLs=[DataURL(format='WCS:CoverageDescription', onlineResource='%sService=WCS&Request=DescribeCoverage&Coverage=%s&Version=%s'%(wcsbaseurl, layerName, version))] 
     110#            except GenerationException: 
     111#                log.info("dataURLs not populated: could not generate WCS url with url_for('wcsroute', filedoruri=%s,qualified=True)"%c.fileoruri) 
     112#                dataURLs=[] 
     113             
     114            onlineRes = OnlineResource(url_for(qualified=True, action='index') +\ 
     115                                    "?request=GetDisplayOptions&layers=%s" % layerName) 
     116            metadataURL = MetadataURL(metadataType='display_options', format='application/json', onlineResource=onlineRes) 
     117         
    110118            # Create the cows object 
    111119            ds = WmsDatasetSummary(identifier=layerName, 
    112                                    titles=[layer.title], 
    113                                    CRSs=layer.crss, 
     120                                   titles=[title], 
     121                                   CRSs=('EPSG:4326', 'CRS:84', 'WGS84'), 
    114122                                   wgs84BoundingBoxes=[wgs84BBox], 
    115123                                   boundingBoxes=bboxObjs, 
    116                                    abstracts=[layer.abstract], 
    117                                    dimensions=dims, 
    118                                    queryable=queryable, 
    119                                    dataURLs=dataURLs) 
     124                                   abstracts=[abstract], 
     125                                   dimensions={}, 
     126                                   queryable=False, 
     127                                   dataURLs=[], 
     128                                   styles=[], 
     129                                   metadataURLs=[metadataURL]) 
    120130 
    121131            # Stuff that should go in the capabilities tree eventually 
    122             ds.legendSize = layer.legendSize 
     132            ds.legendSize = (630,80) 
    123133            ds.legendFormats = ['image/png'] 
    124134 
     
    255265            raise InvalidParameterValue('Format %s not supported' % format) 
    256266 
     267 
     268    def GetDisplayOptions(self): 
     269             
     270        displayOptions = { 
     271#          "common": [ 
     272#                        { 
     273#                            "type":"select", 
     274#                            "name":"cmap", 
     275#                            "options":["bone","jet", "copper", "gray", "winter"], 
     276#                            "title":"Colour Scheme", 
     277#                            "defaultVal":"jet", 
     278#                        }, 
     279#                        { 
     280#                            "type":"value", 
     281#                            "name":"cmap_min", 
     282#                            "title":"Legend Min", 
     283#                            "defaultVal":None, 
     284#                        }, 
     285#                        { 
     286#                            "type":"value", 
     287#                            "name":"cmap_max", 
     288#                            "title":"Legend Max", 
     289#                            "defaultVal":None, 
     290#                        },          
     291#                     ], 
     292#          "grid": [ 
     293#                        { 
     294#                            "type":"bool", 
     295#                            "name":"show_grid_lines", 
     296#                            "title":"Draw Grid Boxes", 
     297#                            "defaultVal":"False", 
     298#                        },     
     299#                  ], 
     300#          "contour":[ 
     301#                        { 
     302#                            "type":"value", 
     303#                            "name":"num_contour_lines", 
     304#                            "title":"Number of Contour Lines", 
     305#                            "defaultVal":10, 
     306#                        }, 
     307#                        { 
     308#                            "type":"select", 
     309#                            "name":"contour_font_size", 
     310#                            "title":"Contour Label Size", 
     311#                            "options":["small","medium", "large",], 
     312#                            "defaultVal":"medium", 
     313#                        },    
     314#                        { 
     315#                            "type":"value", 
     316#                            "name":"contour_label_interval", 
     317#                            "title":"Interval Between Labels", 
     318#                            "defaultVal":1, 
     319#                        },              
     320#                    ], 
     321        } 
     322         
     323         
     324        request.headers['Content-Type'] = 'application/json' 
     325        response.write( json.dumps(displayOptions) ) 
     326 
Note: See TracChangeset for help on using the changeset viewer.