Changeset 5734


Ignore:
Timestamp:
18/09/09 09:47:28 (10 years ago)
Author:
pnorton
Message:

Added some wms request logging that writes the parameeters and the header information to a file. Hopefully this will enable statistics to be generated on the data usage.

Also made some changes to the demo page so that it works in IE.

Location:
qesdi/wms_ddc_vis/trunk
Files:
1 added
9 edited

Legend:

Unmodified
Added
Removed
  • qesdi/wms_ddc_vis/trunk/development.ini

    r5689 r5734  
    1313[server:main] 
    1414use = egg:Paste#http 
    15 host = 127.0.0.1 
     15#host = 127.0.0.1 
     16host = 0.0.0.0 
    1617port = 5000 
    1718use_threadpool = True 
     
    6768# Logging configuration 
    6869[loggers] 
    69 keys = root,paste,pylons,routes,cows,geoplot,cows_wms,cows_ows,cows_imps,cows_wcs 
     70keys = root,paste,pylons,routes,cows,geoplot,cows_wms,cows_ows,cows_imps,cows_wcs,wms_request 
    7071 
    7172[handlers] 
    72 keys = console 
     73keys = console, file 
    7374 
    7475[formatters] 
    75 keys = generic 
     76keys = generic, logfile 
    7677 
    7778[logger_root] 
     
    121122qualname = cows.pylons.wcs_controller 
    122123 
    123  
    124124[logger_cows] 
    125125level = INFO 
     
    134134qualname = geoplot 
    135135 
     136[logger_wms_request] 
     137level = DEBUG 
     138handlers = file 
     139propagate = 0 
     140qualname = wms_request 
     141 
    136142[handler_console] 
    137143class = StreamHandler 
     
    140146formatter = generic 
    141147 
     148[handler_file] 
     149class = FileHandler 
     150args = ('./log.txt',) 
     151level = NOTSET 
     152formatter = logfile 
     153 
    142154[formatter_generic] 
    143155format = %(asctime)s,%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s 
    144156datefmt = %H:%M:%S 
     157 
     158[formatter_logfile] 
     159format = %(asctime)s %(filename)s: %(message)s 
     160 
  • qesdi/wms_ddc_vis/trunk/lib/wms_ddc_vis/controllers/coastwms.py

    r5701 r5734  
    1818from cows.exceptions import * 
    1919from cows import bbox_util 
     20from cows.service.imps.data_reader_geoplot_backend.rendering_option import RenderingOption 
     21from cows.service.imps.data_reader_geoplot_backend.slab_options_parser import SlabOptionsParser 
     22from cows.service.imps.data_reader_geoplot_backend.slab_options_json_generator import SlabJSONGenerator 
     23 
     24from wms_ddc_vis.lib.wms_request_log_utils import buildLogString, wms_request_logger 
     25 
    2026import time 
    2127 
     
    2834 
    2935class CoastwmsController(ows_controller.OWSController): 
     36 
     37    renderingOptions = [ 
     38        RenderingOption('show_rivers', "Show Rivers" ,bool , False ), 
     39        RenderingOption('coastline_colour', "Coastline Colour" ,str , "black" ), 
     40        RenderingOption('resolution', "Coastline Resolution" ,str , "auto", ["coarse","low", "intermediate", "high", "auto"]  ),             
     41    ] 
     42        
    3043 
    3144    #layers = {}     
     
    4962 
    5063 
     64    def __before__(self, **kwargs): 
     65        wms_request_logger.info( buildLogString(request) ) 
    5166 
    5267    def _renderCapabilities(self, version, format): 
     
    8196         
    8297         
    83         layers = ( ('c', 'coarse', 'coarse detail'),  
    84                    ('l', 'low', 'low detail'),  
    85                    ('i', 'intermediate', 'intermediate detail'), 
    86                    ('h', 'high', 'high detail'), 
    87                    ('f', 'full', 'full detail'), 
    88                    ('auto', 'auto', 'automatic detail'),) 
     98   
     99         
     100        layers = ( ('coastline', 'coastline', 'Coast Outline'), ) 
    89101         
    90102         
     
    165177        st = time.time() 
    166178 
     179 
     180        parser = SlabOptionsParser(CoastwmsController.renderingOptions, request.params) 
     181         
     182 
    167183         
    168184        # Housekeeping 
     
    191207            srs = self.getOwsParam('crs') 
    192208 
    193        # Get format 
     209        # Get format 
    194210        format = self.getOwsParam('format') 
    195211        if format not in self._pilImageFormats: 
     
    197213                'Format %s not supported' % format, 'format') 
    198214 
    199         if layerName == 'auto': 
    200             layerName = None 
    201          
     215  
     216        longResolution = parser.getOption('resolution') 
     217        log.debug("longResolution = %s" % (longResolution,)) 
     218        resMap = {'coarse':'c', 
     219                  'low':'l', 
     220                  'intermediate':'i', 
     221                  'high':'h', 
     222                  'full':'f', 
     223                  'auto':None 
     224                  } 
     225        resolution = resMap[longResolution] 
     226          
     227        log.debug("resolution = %s" % (resolution,)) 
    202228        ldg = LayerDrawerCoastlines(transparent=transparent, 
    203                                     resolution=layerName) 
     229                                    resolution=resolution) 
     230 
     231 
     232        ldg.drawRivers = parser.getOption('show_rivers') 
     233        ldg.coastlineColour = parser.getOption('coastline_colour') 
    204234 
    205235        xLimits = (bbox[0], bbox[2]) 
     
    276306 
    277307    def GetDisplayOptions(self): 
    278              
    279         displayOptions = { 
    280 #          "common": [ 
    281 #                        { 
    282 #                            "type":"select", 
    283 #                            "name":"cmap", 
    284 #                            "options":["bone","jet", "copper", "gray", "winter"], 
    285 #                            "title":"Colour Scheme", 
    286 #                            "defaultVal":"jet", 
    287 #                        }, 
    288 #                        { 
    289 #                            "type":"value", 
    290 #                            "name":"cmap_min", 
    291 #                            "title":"Legend Min", 
    292 #                            "defaultVal":None, 
    293 #                        }, 
    294 #                        { 
    295 #                            "type":"value", 
    296 #                            "name":"cmap_max", 
    297 #                            "title":"Legend Max", 
    298 #                            "defaultVal":None, 
    299 #                        },          
    300 #                     ], 
    301 #          "grid": [ 
    302 #                        { 
    303 #                            "type":"bool", 
    304 #                            "name":"show_grid_lines", 
    305 #                            "title":"Draw Grid Boxes", 
    306 #                            "defaultVal":"False", 
    307 #                        },     
    308 #                  ], 
    309 #          "contour":[ 
    310 #                        { 
    311 #                            "type":"value", 
    312 #                            "name":"num_contour_lines", 
    313 #                            "title":"Number of Contour Lines", 
    314 #                            "defaultVal":10, 
    315 #                        }, 
    316 #                        { 
    317 #                            "type":"select", 
    318 #                            "name":"contour_font_size", 
    319 #                            "title":"Contour Label Size", 
    320 #                            "options":["small","medium", "large",], 
    321 #                            "defaultVal":"medium", 
    322 #                        },    
    323 #                        { 
    324 #                            "type":"value", 
    325 #                            "name":"contour_label_interval", 
    326 #                            "title":"Interval Between Labels", 
    327 #                            "defaultVal":1, 
    328 #                        },              
    329 #                    ], 
    330         } 
    331          
    332          
     308         
     309         
     310        generator = SlabJSONGenerator({'':CoastwmsController.renderingOptions}) 
    333311        request.headers['Content-Type'] = 'application/json' 
    334         response.write( json.dumps(displayOptions) ) 
    335  
     312        response.write( generator.generateJSON() ) 
     313 
  • qesdi/wms_ddc_vis/trunk/lib/wms_ddc_vis/controllers/csmlwcs.py

    r5403 r5734  
    44from cows.pylons.wcs_controller import WCSController 
    55 
     6from wms_ddc_vis.lib.wms_request_log_utils import buildLogString, wms_request_logger 
     7 
    68log = logging.getLogger(__name__) 
    79 
    810class CsmlwcsController(WCSController): 
    911    layerMapper=CSMLwcsCoverageMapper() 
     12 
     13    def __before__(self, **kwargs): 
     14        wms_request_logger.info( buildLogString(request) ) 
     15        WMSController.__before__(self, **kwargs) 
  • qesdi/wms_ddc_vis/trunk/lib/wms_ddc_vis/controllers/csmlwfs.py

    r5403 r5734  
    66from cows.pylons.wfs_controller import WFSController 
    77 
     8from wms_ddc_vis.lib.wms_request_log_utils import buildLogString, wms_request_logger 
     9 
    810class CsmlwfsController(WFSController): 
    9         layerMapper=CSMLwfsLayerMapper() 
     11    layerMapper=CSMLwfsLayerMapper() 
    1012 
     13    def __before__(self, **kwargs): 
     14        wms_request_logger.info( buildLogString(request) ) 
     15        WMSController.__before__(self, **kwargs) 
  • qesdi/wms_ddc_vis/trunk/lib/wms_ddc_vis/controllers/csmlwms.py

    r5701 r5734  
    1313 
    1414from wms_ddc_vis.lib.base import request, response 
     15from wms_ddc_vis.lib.wms_request_log_utils import buildLogString, wms_request_logger 
    1516 
    1617log = logging.getLogger(__name__) 
     
    2425                     'application/pdf':'pdf', 
    2526                     'image/svg+xml':'svg'} 
    26      
     27 
     28    def __before__(self, **kwargs): 
     29        wms_request_logger.info( buildLogString(request) ) 
     30        WMSController.__before__(self, **kwargs) 
     31   
    2732    def _loadCapabilities(self, *args, **kwargs): 
    2833        ows_controller.addOperation('GetDisplayOptions', formats=['application/json']) 
  • qesdi/wms_ddc_vis/trunk/lib/wms_ddc_vis/controllers/csmlwms2.py

    r5494 r5734  
    33from cows.pylons.wms_controller import WMSController 
    44from cows.service.imps.csmlbackend.wms_csmllayer import CSMLwmsLayerMapper 
     5 
     6from wms_ddc_vis.lib.wms_request_log_utils import buildLogString, wms_request_logger 
    57 
    68log = logging.getLogger(__name__) 
     
    1012 
    1113     
     14    def __before__(self, **kwargs): 
     15        wms_request_logger.info( buildLogString(request) ) 
     16        WMSController.__before__(self, **kwargs) 
    1217 
    1318 
    1419 
    15  
  • qesdi/wms_ddc_vis/trunk/lib/wms_ddc_vis/controllers/csmlwms3.py

    r5701 r5734  
    1414 
    1515from wms_ddc_vis.lib.base import request, response 
     16from wms_ddc_vis.lib.wms_request_log_utils import buildLogString, wms_request_logger 
    1617 
    1718log = logging.getLogger(__name__) 
     19 
    1820 
    1921class Csmlwms3Controller(WMSController): 
     
    3133        WMSController._loadCapabilities(self, *args, **kwargs) 
    3234     
     35    def __before__(self, **kwargs): 
     36        wms_request_logger.info( buildLogString(request) ) 
     37        WMSController.__before__(self, **kwargs) 
     38     
    3339    def GetDisplayOptions(self): 
    3440         
    35         generator = SlabJSONGenerator(DRGeoplotWmsLayer.slab_classes) 
     41        #create a list of names for each of the styles (each slabClass has its onw style) 
     42        styleOptionsMap = {} 
     43        for klass in DRGeoplotWmsLayer.slab_classes: 
     44            styleOptionsMap[klass.style] = [x for x in klass.renderingOptions] 
     45         
     46         
     47         
     48        generator = SlabJSONGenerator(styleOptionsMap) 
    3649         
    3750        request.headers['Content-Type'] = 'application/json' 
     
    4053         
    4154        response.write( jsonString ) 
    42      
     55    
    4356    
    4457    def GetFigure(self): 
     
    7184        dimValues = self._getDimValues(layerObj) 
    7285         
     86         
    7387        log.debug("dimValues = %s" % (dimValues,)) 
     88        variable = layerObj.dataReader.getNetcdfVar(layerObj.name, dimValues) 
    7489         
    75         variable = layerObj.dataReader.getNetcdfVar(layerObj.name, dimValues) 
     90                             
     91        params = self._getLowerCaseParams() 
    7692         
    7793        log.debug("variable.shape = %s" % (variable.shape,)) 
    7894        log.debug("bbox = %s" % (bbox,)) 
    7995 
    80         optionalParams = self.getOptionalOWSParams(['cmap','CMAP_MAX','CMAP_MIN', 'SHOW_GRID_LINES', 'NUM_CONTOUR_LINES',  
    81                                                     'CONTOUR_LABEL_INTERVAL', 'width', 'height', 'INTERVALCOLOURBAR', 'INTERVALNAMES']) 
    82          
    8396        (xMin, yMin, xMax, yMax) = bbox 
    8497         
     
    91104        kwargs['drawMetadata'] = True 
    92105        kwargs['units'] = layerObj.units 
     106        kwargs['width'] = width 
     107        kwargs['height'] = height 
    93108 
    94         if 'cmap' in optionalParams: 
    95             kwargs['cmap']= optionalParams['cmap'] 
    96              
    97         if self.getOwsParam('cmap', default=None) != None: 
    98             kwargs['cmap'] = self.getOwsParam('cmap') 
     109        if 'cmap' in params: 
     110            kwargs['cmap']= params['cmap'] 
    99111         
    100         if 'INTERVALCOLOURBAR' in optionalParams: 
    101             kwargs['intervalColourbar'] = optionalParams['INTERVALCOLOURBAR'].lower() == 'true' 
     112        if 'intervalcolourbar' in params: 
     113            kwargs['intervalColourbar'] = params['intervalcolourbar'].lower() == 'true' 
    102114         
    103         if 'INTERVALNAMES' in optionalParams: 
    104             kwargs['intervalNames'] = optionalParams['INTERVALNAMES'].split(',') 
     115        if 'intervalnames' in params: 
     116            kwargs['intervalNames'] = params['intervalnames'].split(',') 
    105117         
    106         if 'CMAP_MAX' in optionalParams: 
    107             kwargs['colourBarMax'] = float(optionalParams['CMAP_MAX']) 
     118        if 'cmap_max' in params: 
     119            kwargs['colourBarMax'] = float(params['cmap_max']) 
    108120        else: 
    109121            kwargs['colourBarMax'] = variable[:].max() 
    110122 
    111         if 'CMAP_MIN' in optionalParams: 
    112             kwargs['colourBarMin'] = float(optionalParams['CMAP_MIN']) 
     123        if 'cmap_min' in params: 
     124            kwargs['colourBarMin'] = float(params['cmap_min']) 
    113125        else: 
    114126            kwargs['colourBarMin'] = variable[:].min()         
    115127         
    116         if 'width' in optionalParams: 
    117             kwargs['width'] = int(optionalParams['width']) 
    118          
    119         if 'height' in optionalParams: 
    120             kwargs['height'] = int(optionalParams['height']) 
    121          
    122         log.debug("kwargs = %s" % (kwargs,)) 
     128        log.info("kwargs = %s" % (kwargs,)) 
    123129         
    124130        if styles == "" or styles[0] == 'grid': 
    125131             
    126             if 'SHOW_GRID_LINES' in optionalParams: 
    127                 kwargs['showGridLines'] = optionalParams['SHOW_GRID_LINES'].lower() == 'true' 
     132            if 'show_grid_lines' in params: 
     133                kwargs['showGridLines'] = params['show_grid_lines'].lower() == 'true' 
    128134                 
    129135            plt = PlotLatLon(variable, **kwargs) 
     
    131137        elif styles[0] == 'contour': 
    132138             
    133             if 'NUM_CONTOUR_LINES' in optionalParams: 
    134                 kwargs['numContourLines'] = int(optionalParams['NUM_CONTOUR_LINES']) 
     139            if 'num_contour_lines' in params: 
     140                kwargs['numContourLines'] = int(params['num_contour_lines']) 
    135141         
    136             if 'CONTOUR_LABEL_INTERVAL' in optionalParams: 
    137                 kwargs['contourLabelInterval'] = int(optionalParams['CONTOUR_LABEL_INTERVAL']) 
     142            if 'contour_label_interval' in params: 
     143                kwargs['contourLabelInterval'] = int(params['contour_label_interval']) 
    138144                 
    139145            log.debug("kwargs = %s" % (kwargs,)) 
     
    143149            raise Exception("unknown style %s" % (styles[0],)) 
    144150  
    145          
    146151        if format in self.nonPILFormats.keys(): 
    147152            plt.format = self.nonPILFormats[format] 
     
    161166             
    162167        log.debug("finished getFigure") 
    163      
    164     def getOptionalOWSParams(self, paramNames): 
    165168         
    166         d = {} 
     169    def _getLowerCaseParams(self): 
     170        lowerDictionary = {} 
    167171         
    168         for n in paramNames: 
    169             val = self.getOwsParam(n, default=None) 
    170               
    171             if val == None: continue 
     172        for k, v in request.params.items(): 
    172173             
    173             val.strip() 
     174            if v == None: 
     175                continue  
    174176             
    175             if val == "": continue 
     177            v.strip() 
    176178             
    177             d[n] = val 
     179            if v == "": 
     180                continue 
    178181             
    179         return d 
     182            lowerDictionary[k.lower()] = v 
     183         
     184        return lowerDictionary 
     185 
    180186                 
  • qesdi/wms_ddc_vis/trunk/lib/wms_ddc_vis/public/demo.js

    r5707 r5734  
     1 
     2/*global document:false, OpenLayers:false, $:false , fcURL:false */ 
    13 
    24var map; 
    35var dataLayer = null; 
    46var jsonFormat = new OpenLayers.Format.JSON(); 
     7 
     8function setLayerDim(dimension, value) { 
     9    var params = {}; 
     10    params[dimension] = value; 
     11    dataLayer.mergeNewParams(params); 
     12} 
     13 
     14//Load the GetContext JSON response for a layer to get it's dimensions. 
     15function getLayerDetails(layer) { 
     16    var r = OpenLayers.Request.GET({ 
     17        url: fcURL, 
     18        params: { 
     19            layers: layer, 
     20            request: 'GetContext',  
     21            format: 'application/json' 
     22        }, 
     23        async: false 
     24    }); 
     25  
     26    //!TODO: should probably trap errors here. 
     27    
     28    return jsonFormat.read(r.responseText); 
     29} 
     30 
     31 
     32//call WCS with current map parameters (bbox, layer, crs, dimensions etc) 
     33function callWCS() { 
     34 //console.log('making WCS request'); 
     35 //console.log('layer name: ' + dataLayer.name); 
     36 //console.log('map extent: ' + map.getExtent()); 
     37 //TODO: read the dimopt_d select dropdowns - get values 
     38 //convert into WCS request. 
     39} 
     40 
     41//Create a download button, set to invisible at first 
     42function createDownloadButton(div) { 
     43    var button = document.createElement('input'); 
     44    button.type = 'submit'; 
     45    button.id = 'wcsdownload'; 
     46    button.value = 'Download (not working yet)'; 
     47    button.onclick = function () { 
     48        callWCS(); 
     49    }; 
     50     
     51    div.appendChild(button); 
     52} 
     53 
     54//Populate a div with details about a layer 
     55var buildLayerPanel = function (div, layer) { 
     56    var details, title, abstract, dim, d, s, extent, x, opt; 
     57 
     58    details = getLayerDetails(layer)[layer]; 
     59 
     60    title = '<div><b>Title: </b>' + details.title + '</div>'; 
     61    abstract = '<div><b>Abstract: </b>' + details.abstract + '</div>'; 
     62    div.innerHTML = title + abstract; 
     63 
     64    for (d in details.dimensions) { 
     65        dim = div.appendChild(document.createElement('div')); 
     66        dim.innerHTML = '<b>' + d + ': </b>'; 
     67        s = dim.appendChild(document.createElement('select')); 
     68        s._dim = d; 
     69        s.id = 'dimopt_' + d; 
     70        s.onchange = function () { 
     71            setLayerDim(this._dim, this.value); 
     72        }; 
     73     
     74        extent = details.dimensions[d].extent; 
     75        for (x = 0; x < extent.length; x++) { 
     76            opt = s.appendChild(document.createElement('option')); 
     77            opt.value = extent[x]; 
     78            opt.innerHTML = extent[x]; 
     79        } 
     80         
     81        dim.appendChild(document.createTextNode(' ' + details.dimensions[d].units)); 
     82         
     83        if (document.getElementById('wcsdownload') === null) { 
     84            createDownloadButton(dim);   
     85        }    
     86    } 
     87}; 
     88 
     89 
     90 
     91 
     92var setLayer = function (layer) { 
     93     
     94    if (dataLayer !== null) { 
     95        map.removeLayer(dataLayer); 
     96    } 
     97         
     98    if (!layer) { 
     99         
     100        /*displayed when no layer is selected*/ 
     101         
     102        dataLayer = new OpenLayers.Layer.WMS( 
     103            "Data Layer", 
     104            "http://labs.metacarta.com/wms/vmap0", 
     105            { 
     106                layers: 'basic',  
     107                format: 'image/png',  
     108                transparent: 'false' 
     109            }                  
     110        ); 
     111         
     112    } else { 
     113         
     114        dataLayer = new OpenLayers.Layer.WMS( 
     115            layer, 
     116            fcURL, 
     117            { 
     118                layers: layer, 
     119                format: 'image/png' 
     120            } 
     121        ); 
     122     
     123        buildLayerPanel($('panel'), layer); 
     124     
     125    } 
     126     
     127    if (dataLayer !== null) { 
     128        map.addLayer(dataLayer); 
     129    } 
     130 
     131}; 
     132 
     133 
     134 
     135 
     136 
    5137 
    6138function init() { 
     
    11143     
    12144    var coast = new OpenLayers.Layer.WMS( 
    13                 "Coastline", 
    14                 "http://labs.metacarta.com/wms/vmap0", 
    15                 { layers: 'coastline_01', format: 'image/png', transparent: 'true' } 
     145            "Coastline", 
     146            "http://labs.metacarta.com/wms/vmap0", 
     147            { layers: 'coastline_01', format: 'image/png', transparent: 'true' } 
    16148    ); 
    17149     
     
    23155} 
    24156 
    25 function setLayer(layer) { 
    26          
    27     if (dataLayer !== null) { 
    28         map.removeLayer(dataLayer); 
    29     } 
    30      
    31     if (!layer) { 
    32          
    33         /*displayed when no layer is selected*/ 
    34          
    35                 dataLayer = new OpenLayers.Layer.WMS( 
    36                     "Data Layer", 
    37                     "http://labs.metacarta.com/wms/vmap0", 
    38                     { 
    39                         layers: 'basic', format: 'image/png', transparent: 'false' 
    40                     }                             
    41                 ); 
    42          
    43         } else { 
    44                  
    45                 dataLayer = new OpenLayers.Layer.WMS( 
    46                     layer, 
    47                     fcURL, 
    48                     { 
    49                                 layers: layer, 
    50                                 format: 'image/png' 
    51                     } 
    52                 ); 
    53          
    54                 buildLayerPanel($('panel'), layer); 
    55          
    56     } 
    57      
    58     if (dataLayer!=null) { 
    59         map.addLayer(dataLayer); 
    60     } 
    61157 
    62 } 
    63  
    64 function setLayerDim(dimension, value) { 
    65     var params = {}; 
    66     params[dimension] = value; 
    67     dataLayer.mergeNewParams(params); 
    68     //console.log('Set Layer Dim '+dimension+', '+value); 
    69 } 
    70  
    71 // Load the GetContext JSON response for a layer to get it's dimensions. 
    72 function getLayerDetails(layer) { 
    73     var r = OpenLayers.Request.GET({ 
    74         url: fcURL, 
    75         params: { 
    76             layers: layer, 
    77             request: 'GetContext', format: 'application/json', 
    78         }, 
    79         async: false 
    80     }); 
    81   
    82     //!TODO: should probably trap errors here. 
    83     
    84     return jsonFormat.read(r.responseText); 
    85 } 
    86  
    87 // Populate a div with details about a layer 
    88 function buildLayerPanel(div, layer) { 
    89     var details, title, abstract, dim, d, s, extent, x, opt; 
    90  
    91     details = getLayerDetails(layer)[layer]; 
    92  
    93     title = '<div><b>Title: </b>'+details.title+'</div>'; 
    94     abstract = '<div><b>Abstract: </b>'+details.abstract+'</div>'; 
    95     div.innerHTML = title+abstract; 
    96  
    97     for (d in details.dimensions) { 
    98         dim = div.appendChild(document.createElement('div')); 
    99         dim.innerHTML = '<b>'+d+': </b>'; 
    100         s = dim.appendChild(document.createElement('select')); 
    101         s._dim = d; 
    102         s.id='dimopt_'+d 
    103         s.onchange = function() { 
    104             setLayerDim(this._dim, this.value); 
    105         }; 
    106         extent = details.dimensions[d].extent; 
    107         for (x=0; x<extent.length; x++) { 
    108             opt = s.appendChild(document.createElement('option')); 
    109             opt.value = extent[x]; 
    110             opt.innerHTML = extent[x]; 
    111         } 
    112         dim.appendChild(document.createTextNode(' '+details.dimensions[d].units)); 
    113         if (document.getElementById('wcsdownload') == null) { 
    114                 createDownloadButton(dim);       
    115                 }        
    116     } 
    117 } 
    118  
    119  
    120 // call WCS with current map parameters (bbox, layer, crs, dimensions etc) 
    121 function callWCS() { 
    122         console.log('making WCS request'); 
    123         console.log('layer name: ' +dataLayer.name); 
    124         console.log('map extent: ' + map.getExtent()); 
    125         //TODO: read the dimopt_d select dropdowns - get values 
    126         //convert into WCS request. 
    127 } 
    128  
    129 //Create a download button, set to invisible at first 
    130 function createDownloadButton(div) { 
    131     button=div.appendChild(document.createElement('input')); 
    132     button.type='submit'; 
    133     button.id='wcsdownload'; 
    134     button.value='Download (not working yet)'; 
    135     button.onclick= function() { 
    136         callWCS(); 
    137     }; 
    138 } 
    139  
    140  
    141  
  • qesdi/wms_ddc_vis/trunk/lib/wms_ddc_vis/templates/demo.html

    r5707 r5734  
    1 <?xml version="1.0"?> 
     1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
    22 
    33<html xmlns:py="http://genshi.edgewall.org/"  
     
    2525    height: 260px; 
    2626    background=color: white; 
    27     margin: 1px; 
     27    margin: 0px; 
    2828    border: 1px solid #222277; 
     29    z-index:0; 
    2930} 
    3031 
    3132DIV#panel { 
    32     border: 2px solid red; 
     33    border: 1px solid red; 
     34    margin: 5px; 
    3335} 
    3436 
     
    3739</head> 
    3840 
    39 <body onload="init()"> 
     41<body onload="init();"> 
    4042   
    4143  <h1>Demo Map page for ${c.fcName}</h1> 
     
    4951  <select name="feature" onchange="setLayer(this.value)"> 
    5052    <option value="">Unset</option> 
    51     <option py:for="f_id in c.featureCollection.getFeatureList()">${f_id}</option> 
     53 
     54    <py:for each="f_id in c.featureCollection.getFeatureList()"> 
     55            <option value="${f_id}">${f_id}</option> 
     56    </py:for> 
    5257  </select> 
    5358</body> 
Note: See TracChangeset for help on using the changeset viewer.