Changeset 5557 for cowsclient


Ignore:
Timestamp:
04/08/09 16:33:47 (10 years ago)
Author:
pnorton
Message:

Implemented a basic (no legend/metadata/axis) get figure on the UI. Also re-implemented the getData button for the selected layer.

Location:
cowsclient/branches/qesdi/cowsclient
Files:
1 added
7 edited

Legend:

Unmodified
Added
Removed
  • cowsclient/branches/qesdi/cowsclient/controllers/wmsviz.py

    r5551 r5557  
    251251        params = request.params.copy() 
    252252         
     253         
     254         
    253255        defaults = { 
    254          'bbox': "%s,%s,%s,%s" % (-180,-90,180,90), 
    255          'width':900, 
    256          'height':600, 
     256         'BBOX': "%s,%s,%s,%s" % (-180,-90,180,90), 
     257         'WIDTH':900, 
     258         'HEIGHT':600, 
    257259         'SRS':'EPSG:4326', 
    258          'format':'image/png', 
    259          'transparent':'True',                     
     260         'FORMAT':'image/png', 
     261         'TRANSPARENT':'True',                     
    260262        } 
    261263         
     
    268270        log.debug("defaults = %s" % (defaults,)) 
    269271         
    270         defaults['Request'] = 'GetMap' 
    271          
    272         width = int(params.get('width', defaults['width'])) 
    273         height = int(params.get('height', defaults['height'])) 
     272        defaults['REQUEST'] = 'GetMap' 
     273         
     274        width = int(params.get('WIDTH', defaults['WIDTH'])) 
     275        height = int(params.get('HEIGHT', defaults['HEIGHT'])) 
    274276         
    275277        images = [] 
     
    296298            log.debug("p = %s" % (p,)) 
    297299             
    298             endpoint  = p.pop('endpoint') 
     300            endpoint  = p.pop('ENDPOINT') 
    299301            requestURL = endpoint +"?" + urllib.urlencode(p) 
    300302             
  • cowsclient/branches/qesdi/cowsclient/public/js/boundsControl.js

    r5457 r5557  
    1212WMSC.BoundsControl.prototype =  
    1313{ 
    14     EVENT_TYPES: ['changeWMS','changeSelection','clearSelection'], 
     14    EVENT_TYPES: ['changeWMS','changeSelection','clearSelection', 'TEXT_SELECTION_CHANGED'], 
    1515    GLOBAL_BOUNDS: new OpenLayers.Bounds(-180.0,-90.0,180.0,90.0), 
    1616 
     
    6060                this._selectedDims = {}; 
    6161                 
     62                this._lastSelection = null; 
     63                 
    6264        this._initDomainDiv(); 
    6365    }, 
     
    7779    _selectionListener: function()  
    7880    { 
    79         //alert("RAISED changeSelection"); 
    80                 this.events.triggerEvent('changeSelection'); 
     81        var selection = this.getSelection(); 
     82        WMSC.log("triggering TEXT_SELECTION_CHANGED, selection = " + selection); 
     83        this.events.triggerEvent('TEXT_SELECTION_CHANGED', {selection:selection}); 
     84         
     85        // this will be picked up by the map control, this map control will 
     86        // then raise the MAP_SELECTION_CHANGED event (cannot be supressed as is 
     87        // called by openlayers internals) which will call the changeSelection. 
    8188    }, 
    8289     
     
    136143         * @param noCascade - if false trigger a changeSelection event  
    137144         */ 
    138     setSelection: function(bbox, noCascade)  
     145    setSelection: function(bbox)  
    139146    { 
    140147        //alert("Set selection bbox="+ bbox + " noCascade = " + noCascade); 
     
    173180                this.selectionForm.bboxN.value = bbox.top.toFixed(1); 
    174181 
    175                 if (noCascade != true) { 
    176 //                      alert("triggering changeSelection"); 
    177                 this.events.triggerEvent('changeSelection'); 
    178                 } 
     182    }, 
     183     
     184    /** 
     185     * Need to listen for dragging of the selection box on the map itself 
     186     */ 
     187    addMapSelectionChanged: function(events) { 
     188        events.register('MAP_SELECTION_CHANGED', this, this._onMapSelectionChanged);             
     189    }, 
     190     
     191    /** 
     192     * When the selection on the map has changed update the bounds controls. 
     193     *  
     194     * It is worth noting that there is no easy way to stop this event from  
     195     * triggering when re-drawing the bounds layer so this handler will be 
     196     * called if the selection box text is changed. 
     197     */ 
     198    _onMapSelectionChanged: function(e) { 
     199        this.setSelection(e.selection); 
    179200    }, 
    180201     
  • cowsclient/branches/qesdi/cowsclient/public/js/layerDimensions.js

    r5551 r5557  
    108108    }, 
    109109 
     110    getSelectedDimensions: function() { 
     111        var dims = {}; 
     112         
     113        for (var i=0; i< this._form.elements.length; i++) { 
     114                var element = this._form.elements[i]; 
     115                 
     116                if (element.name != null) { 
     117                        dims[element.name] = element.value; 
     118                } 
     119        } 
     120         
     121        return dims; 
     122    }, 
     123     
    110124} 
  • cowsclient/branches/qesdi/cowsclient/public/js/layerList.js

    r5551 r5557  
    8383                if (this.getSelectedLayer() != null) { 
    8484                        this._removeSelectedItem(); 
     85                         
     86                        var items = this._getCurrentListItems();  
     87                        if (items.length > 0) { 
     88                                this._selectItem(items[0]); 
     89                        } 
     90                         
    8591                        this._triggerLayerOrderChange(); 
    8692                        this._triggerSelectedLayerChange();     //selected layer should now be null 
  • cowsclient/branches/qesdi/cowsclient/public/js/mapControl.js

    r5551 r5557  
    1414WMSC.VisApp.prototype =  
    1515{ 
     16        EVENT_TYPES: ['MAP_SELECTION_CHANGED'], 
     17         
    1618    /** 
    1719     * Constructor to set up object 
     
    2830                this.showCoast = showCoast; 
    2931 
     32                this.events = new OpenLayers.Events(this, div, this.EVENT_TYPES);                
     33                 
    3034                // NB, can't override both numZoomLevels and minResolution with 
    3135                // the current OpenLayers code.  Instead calculate resolutions 
     
    108112         { 
    109113                this.boundsControl = control; 
    110                 this.boundsControl.events.register('changeSelection', this, this.updateSelectionBox); 
     114                this.boundsControl.events.register('TEXT_SELECTION_CHANGED', this, this.updateSelectionBox); 
    111115                this.boundsControl.events.register('changeWMS', this, this.updateVisLayer); 
    112116                this.boundsControl.events.register('clearSelection', this, this.resetMapCoords); 
     
    116120         },     
    117121     
    118 //    /** 
    119 //     * Specify a dimension control to use with the map 
    120 //     * @param dimControl - a suitable dimension control 
    121 //     * - this must include an attribute, wmsParams and a method 
    122 //     * getSelection retuning an OpenLayers.Bounds object 
    123 //     */ 
    124 //    addDimensionControl: function(dimControl) 
    125 //    { 
    126 //      this.dimControl = dimControl; 
    127 //              this.dimControl.events.register('changeSelection', this, this.updateSelectionBox); 
    128 //              this.dimControl.events.register('changeWMS', this, this.updateVisLayer); 
    129 //              this.dimControl.events.register('clearSelection', this, this.resetMapCoords); 
    130 //       
    131 //              this.map.events.register('moveend', this, this.updateDimensionControl); 
    132 //              this.map.events.register('zoomend', this, this.updateDimensionControl); 
    133 //    }, 
    134 //     
    135 //     
    136 //    /** 
    137 //     * Specify a layer control to use with the map 
    138 //     * @param layerControl - a suitable layer control 
    139 //     */ 
    140 //    addLayerControl: function(layerControl) 
    141 //    { 
    142 //              layerControl.events.register('changeSelection', this, this.updateSelectionBox); 
    143 //              layerControl.events.register('changeWMS', this, this.updateVisLayer); 
    144 //    }, 
     122 
    145123 
    146124    addLayersHandlers: function (events) { 
     
    346324                } 
    347325    }, 
    348      
    349         /** 
    350          * Make a figure of the displayed data 
    351          * NB, this is not currently properly implemented 
    352          * and is just replicated from the ipcc dcip codebase 
    353          * @param typeInput - colour of output figure 
    354          * @param formatSelect - format of output figure 
    355          */ 
    356     makeFigure: function(typeInput, formatSelect)  
    357     { 
    358                 var clim = this.visLayer; 
    359                 //var caption = 'IPCC Data Distribution Centre: www.ipcc-data.org\n' + this.layerControl.getStateDescription().join('.\n'); 
    360                 for (var i=0; i<typeInput.length; i++)  
    361                 { 
    362                 if (typeInput[i].checked)  
    363                 { 
    364                                 var figType = typeInput[i].value; 
    365                                 break; 
    366                 } 
    367                 } 
    368  
    369                 var url = clim.getFullRequestString({ 
    370                 REQUEST: 'GetFigure', 
    371                                 BBOX: this.subselControl.getActiveBounds().toBBOX(), 
    372                                 CAPTION: caption, 
    373                                 TYPE: figType, 
    374                     FORMAT: formatSelect.value 
    375                         }); 
    376                 if (formatSelect.value == 'application/postscript')  
    377                 { 
    378                 location.href = url; 
    379                 } 
    380                 else  
    381                 { 
    382                 window.open(url, 'figure_'+this.figureCounter, 'toolbars=no,location=no,directories=no,menubar=no'); 
    383                 this.figureCounter++; 
    384                 } 
    385     }, 
    386      
     326 
    387327     
    388328    /** 
     
    395335                var b = this.subselControl.getActiveBounds(); 
    396336                 
    397                 if (this.boundsControl) { 
    398                         this.boundsControl.setSelection(b, noCascade=true); 
    399                 } 
    400  
     337                WMSC.log("triggering MAP_SELECTION_CHANGED, selection = " + b); 
     338                this.events.triggerEvent('MAP_SELECTION_CHANGED', {selection:b}); 
     339                 
    401340//              // Switch to higerres coasts if needed 
    402341//              var coastLayer = 'coastline_01'; 
     
    414353         * - taking the values from the input coord control 
    415354         */ 
    416     updateSelectionBox: function()  
    417     { 
    418 //      alert("started update selection box"); 
     355    updateSelectionBox: function(e)  
     356    { 
     357        WMSC.log("started update selection box"); 
     358         
    419359                var old_b = this.subselControl.getActiveBounds(); 
    420                 var new_b = this.boundsControl.getSelection(); 
    421          
     360                var new_b = e.selection; 
     361                 
    422362                // Validation.  negative tests required to catch NaN 
    423363                if (!(new_b.left > -180.0 && new_b.left < 180.0))  
     
    450390                } 
    451391                 
     392                // this command triggers the moveend map event. 
    452393                this.subselControl.setSubSel(new_b); 
    453 //              alert("finished update selection box"); 
    454                  
     394                WMSC.log("finished update selection box"); 
    455395    }, 
    456396 
  • cowsclient/branches/qesdi/cowsclient/public/js/wcs.js

    r5534 r5557  
    1919        // get the topmost layer 
    2020        // NB, there are initially three layers - for the subselection box, coastline and base map 
    21         var layerNo = app.map.layers.length; 
    22         var topLayer = app.map.layers[layerNo - 3]; 
     21         
     22        //var layerNo = app.map.layers.length; 
     23        //var topLayer = app.map.layers[layerNo - 3]; 
     24        var topLayer = layerList.getSelectedLayer(); 
     25         
    2326        var wmsurl = topLayer.getFullRequestString(); 
    2427        var urlparts = wmsurl.split('?'); 
     
    2629        var coords=document.getElementById('coordsForm'); 
    2730        var bbox =coords['bboxW'].value + ',' + coords['bboxS'].value + ',' + coords['bboxE'].value + ',' + coords['bboxN'].value; 
    28         makeWCSrequest(wcsEndpoint, topLayer.name, bbox, app.dimControl._selectedDims); 
     31         
     32        var dims = layerParameters.layerDims.getSelectedDimensions(); 
     33        makeWCSrequest(wcsEndpoint, topLayer.params.LAYERS, bbox, dims); 
    2934} 
    3035 
    3136 
    32 function makeWCSrequest(wcsEndpoint, coverageid, bbox, dims) 
    33                 // makes the request to the WCS server 
    34                 { 
    35                 var params={'request':'GetCoverage', 'service':'WCS', 'version':'1.0.0','crs':'EPSG:4326','format':'cf-netcdf'}  //to store the wcs parameters 
    36                 //add coverage, bbox and dimension parameters 
    37                 params['coverage']=coverageid 
    38                 params['bbox']=bbox 
    39                 for (dim in app.dimControl._selectedDims) 
    40                 { 
    41                 params[dim]=dims[dim]; 
    42                 }        
     37function makeWCSrequest(wcsEndpoint, coverageid, bbox, dims) { 
     38        // makes the request to the WCS server 
     39         
     40        var params={'request':'GetCoverage', 'service':'WCS', 'version':'1.0.0','crs':'EPSG:4326','format':'cf-netcdf'}  //to store the wcs parameters 
     41 
     42        //add coverage, bbox and dimension parameters 
     43        params['coverage']=coverageid 
     44        params['bbox']=bbox 
     45        for (var dim_id in dims) { 
     46                params[dim_id]=dims[dim_id]; 
     47        }        
    4348                 
    44                 //build url string 
    45                 var wcsurl=wcsEndpoint; 
    46                 for (param in params) 
    47                 { 
     49        //build url string 
     50        var wcsurl=wcsEndpoint; 
     51        for (param in params) { 
    4852                wcsurl = wcsurl + param + '=' + params[param] + '&'; 
    49                 } 
    50                 //WMSC.log('Making wcs request to ' + wcsurl) 
    51                 window.open(wcsurl, 'download');  
    52                 return false; 
    53                 } 
     53        } 
     54        WMSC.log('Making wcs request to ' + wcsurl) 
     55        window.open(wcsurl, 'download');  
     56        return false; 
     57} 
    5458 
  • cowsclient/branches/qesdi/cowsclient/templates/wmsviz.html

    r5534 r5557  
    6868<script src="$g.server/js/layerParameters.js"></script> 
    6969 
     70<script src="$g.server/js/figureBuilder.js"></script> 
     71 
    7072<script src="$g.server/js/legendContainer.js"></script> 
    7173<script src="$g.server/js/boundsControl.js"></script> 
     
    8082var app = null; 
    8183var control = null; 
     84var layerList = null; 
     85var layerParameters = null; 
    8286 
    8387<?python 
     
    9498    var wmcRetriever = new WMCRetriever(); 
    9599         
    96         var layerList = new LayerList('layer_list'); 
    97          
    98     var layerParameters = new LayerParameters('layer_properties', 'selection_form', wmcRetriever); 
     100        layerList = new LayerList('layer_list'); 
     101         
     102    layerParameters = new LayerParameters('layer_properties', 'selection_form', wmcRetriever); 
    99103     
    100104    var legendContainer = new LegendContainer('legend'); 
     105 
     106    var figBuilder = new FigureBuilder('figureForm','make_figure_btn'); 
     107 
    101108     
    102109    var boundsControl = new WMSC.BoundsControl('dims'); 
     
    104111    var coordControl = null; 
    105112    var layerControl = new WMSC.VisAppLayers('layerTree', 'layerLeaves',wmcRetriever, 'new_endpoint', 'add_new_endpoint');   
     113 
     114 
     115    figBuilder.addLayerOrderChangedHandlers(layerList.events); 
    106116     
    107117    layerList.addSelectorHandlers(layerControl.events); 
     
    111121    app = new WMSC.VisApp('map', 10, 640, true); 
    112122 
     123    boundsControl.addMapSelectionChanged(app.events) 
     124    figBuilder.addMapSelectionChangedHandlers(app.events); 
     125     
    113126    app.addLayersHandlers(layerList.events); 
    114127 
     
    116129 
    117130    if (document.getElementById('wcsdownload') == null) { 
    118         //createDownloadButton(wcsdownloadDiv);     
     131        createDownloadButton(wcsdownloadDiv);     
    119132    } 
    120133 
     
    141154{ 
    142155    app.destroy(); 
     156    layerList.destroy(); 
     157    layerParameters.destroy(); 
    143158} 
    144159     
     
    200215              </div> 
    201216             
    202             <form id="figureForm"> 
     217             
     218            <form id="figureForm" action="http://localhost:5005/wmsviz/get_figure" method="get" target="_blank"> 
    203219              <b>Plot type</b><br/> 
    204220              <input type="radio" name="figType" value="colour" checked="1"/>Colour<br/> 
     
    211227                <option value="image/svg+xml" name="figFormat"> SVG </option> 
    212228              </select> 
    213               <input type="button" value="Make Figure"  
    214                   onclick="app.makeFigure(this.parentNode.figType, this.parentNode.figFormat)"/> 
     229              <input type="button" value="Make Figure" id="make_figure_btn"/> 
    215230            </form> 
    216231             
Note: See TracChangeset for help on using the changeset viewer.