Changeset 5324
- Timestamp:
- 12/01/07 18:21:11 (1 year ago)
- Files:
-
- sandbox/ominiverdi/ows/OWSManager/examples/catalogue (added)
- sandbox/ominiverdi/ows/OWSManager/examples/catalogue/fake_catalogue_response.xml (added)
- sandbox/ominiverdi/ows/OWSManager/examples/wms_manager_stile.html (modified) (7 diffs)
- sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMSManager.js (modified) (7 diffs)
- sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Format/WMC.js (modified) (5 diffs)
- sandbox/ominiverdi/ows/OWSManager/theme/OWSManager/owsmanager.css (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
sandbox/ominiverdi/ows/OWSManager/examples/wms_manager_stile.html
r5264 r5324 4 4 #map { 5 5 width: 800px; 6 height: 375px;6 height: 500px; 7 7 border: 1px solid black; 8 8 position:relative; … … 17 17 overflow:auto; 18 18 } 19 #text { 20 position:absolute; 21 left:820px; 22 width:200px; 23 height: 480px; 24 top:8px; 25 border: 1px solid black; 26 overflow:auto; 27 padding:10px; 28 29 } 30 #output{ 31 width:200px; 32 height:300px; 33 } 19 34 </style> 20 35 … … 39 54 <script src="../lib/OpenLayers/Control/SLDManager.js"></script> 40 55 <script src="../lib/OpenLayers/Format/SLD.js"></script> 56 <script src="../lib/OpenLayers/Format/WMC.js" type="text/javascript"></script> 41 57 42 58 <script type="text/javascript"> … … 61 77 //["OpenLayers WMS-C", "http://labs.metacarta.com/wms-c/Basic.py?"], 62 78 ['OpenLayers WMS','http://labs.metacarta.com/cgi-bin/mapserv?map=/www/labs/map/vmap0.map'],//content type: application/vnd.ogc.wms_xml 63 ['World - NASA Blue Marble Next Generation','http://wms.jpl.nasa.gov/wms.cgi?'], 64 ['World - esa','http://mapserv2.esrin.esa.it/cubestor/cubeserv/cubeserv.cgi?'],// no layers shown in list 79 ['Telascience','http://wms.telascience.org/cgi-bin/ngBM_wms?STYLES=&TIME=2004-09&'], 80 ['World - NASA Blue Marble Next Generation','http://wms.jpl.nasa.gov/wms.cgi?'], 81 //['World - esa','http://mapserv2.esrin.esa.it/cubestor/cubeserv/cubeserv.cgi?'],// no layers shown in list 65 82 ['World - Demis World Map','http://www2.demis.nl/mapserver/Request.asp?'], 66 ['Tilecache at OpenPlans','http://sigma.openplans.org/tilecache-1.3/tilecache.py?'],67 ['FAO','http://193.43.36.137/ows/14110'],83 //['Tilecache at OpenPlans','http://sigma.openplans.org/tilecache-1.3/tilecache.py?'], 84 //['FAO','http://193.43.36.137/ows/14110'], 68 85 ['NATO','http://geos2.nurc.nato.int/geoserver/wms'], 69 ['Kappa','http://149.139.8.29/geoserver/wms?'],86 //['Kappa','http://149.139.8.29/geoserver/wms?'], 70 87 //[ 'Mumbay - freemap','http://mumbai.freemap.in/tiles?'], 71 88 ['CubeWerx','http://demo.cubewerx.com/demo/cubeserv/cubeserv.cgi?config=main&'], 72 ['QGIS WMS server at ethz.ch','http://karlinapp.ethz.ch/fcgi-bin/qgis_wms_dir/europe/qgis_wms_serv.fcgi?'],89 //['QGIS WMS server at ethz.ch','http://karlinapp.ethz.ch/fcgi-bin/qgis_wms_dir/europe/qgis_wms_serv.fcgi?'], 73 90 ['AU - Aims Australia','http://adc.aims.gov.au:9555/atlas/SstWmsServer?'], 74 91 ['BR - Unidades de Conservacao do Brasil (dados preliminares)','http://mapas.mma.gov.br/cgi-bin/mapserv?map=/opt/www/html/webservices/ucs.map&'], 75 ['SP - IGN','http://www.idee.es/wms/IDEE-Base/IDEE-Base'],92 //['SP - IGN','http://www.idee.es/wms/IDEE-Base/IDEE-Base'], 76 93 ['SP - Catalunya - ICC Web Map Service','http://shagrat.icc.es/lizardtech/iserv/ows?'], 77 94 ['SP - Junta Andalucia','http://www.andaluciajunta.es/IDEAndalucia/IDEAwms/wms/MTA100v?'], 78 ['SP - Aragon', 'http://sitar.aragon.es/AragonWMS?'],79 ['SP - Asturias','http://www.cartografia.asturias.es/wmsortofotos/request.asp?'],80 ['SP - Comunidad Valenciana - Conselleria de Territori i Habitatge, GVA - Servici WMS: wms_senderos','http://orto.cth.gva.es/wmsconnector/com.esri.wms.Esrimap/wms_senderos?'] ,81 ['SP - Euskadi (Pais Vasco)','http://www1.euskadi.net/servlet/com.esri.wms.Esrimap?ServiceName=GVasco']95 //['SP - Aragon', 'http://sitar.aragon.es/AragonWMS?'], 96 //['SP - Asturias','http://www.cartografia.asturias.es/wmsortofotos/request.asp?'], 97 ['SP - Comunidad Valenciana - Conselleria de Territori i Habitatge, GVA - Servici WMS: wms_senderos','http://orto.cth.gva.es/wmsconnector/com.esri.wms.Esrimap/wms_senderos?'] 98 //['SP - Euskadi (Pais Vasco)','http://www1.euskadi.net/servlet/com.esri.wms.Esrimap?ServiceName=GVasco'] 82 99 //['SP - La Rioja','http://wms.larioja.org/request.asp'] 83 100 … … 97 114 98 115 //map.addControl(new OpenLayers.Control.NavToolbar()); 99 var queryTarget = $('queryOut'); 100 WMSToolbar = new OpenLayers.Control.WMSToolbar({queryTarget: queryTarget}); 101 map.addControl(WMSToolbar); 116 //var queryTarget = $('queryOut'); 117 //WMSToolbar = new OpenLayers.Control.WMSToolbar({queryTarget: queryTarget}); 118 //map.addControl(WMSToolbar); 119 map.addControl(new OpenLayers.Control.NavToolbar()); 102 120 //alert(WMSToolbar.div.id); 103 121 //WMSToolbar.style.display = "none"; 104 map.addControl(new OpenLayers.Control.WMSPermalink());105 map.addControl(new OpenLayers.Control.WMSExporter());122 //map.addControl(new OpenLayers.Control.WMSPermalink()); 123 //map.addControl(new OpenLayers.Control.WMSExporter()); 106 124 //map.addControl(new OpenLayers.Control.WMCExporter()); 107 125 108 map.addControl( new OpenLayers.Control.SLDManager( $('queryOut')) );126 map.addControl( new OpenLayers.Control.SLDManager() ); 109 127 110 128 //map.addControl(new OpenLayers.Control.OverviewMap()); … … 113 131 } 114 132 133 //MAP CONTEXT 134 var olon = new OpenLayers.Format.OLON(); 135 var wmc = new OpenLayers.Format.WMC(); 136 137 function setContext(name){ 138 switch(name) 139 { 140 case 'us': 141 var ows_url = 'http://www.ominiverdi.org/ogc/wmc/usa.xml'; 142 OpenLayers.loadURL(ows_url, null, null, loadSuccess, loadFailure); 143 break; 144 case 'europa': 145 var ows_url = 'http://www.ominiverdi.org/ogc/wmc/europa.xml'; 146 OpenLayers.loadURL(ows_url, null, null, loadSuccess, loadFailure); 147 break; 148 case 'tasmania': 149 var ows_url = 'http://www.ominiverdi.org/ogc/wmc/tasmania.xml'; 150 OpenLayers.loadURL(ows_url, null, null, loadSuccess, loadFailure); 151 break; 152 default: 153 return alert('no context has that name'); 154 } 155 } 156 var olon_str; 157 var obj; 158 function loadSuccess(request) { 159 160 //load the WMC output 161 updateStatus("loaded"); 162 updateStatus(request.responseText); 163 olon_str = wmc.read(request.responseText); 164 //updateStatus(request.responseText); 165 166 167 //Read WMC 168 //var olon = wmc.write(wmc_str); 169 170 //Transform WMC to OLON 171 obj = olon.read(olon_str); 172 173 174 //ADD Map to OL 175 if(obj.projection){ 176 map.projection = obj.projection; 177 } 178 179 //console.log(obj); 180 //console.log('proj: '+obj.projection + ' '+ map.projection); 181 var bLayer = null; 182 //clean actual map 183 for(var i=0; i < map.getNumLayers(); i++) { 184 if(map.layers[i]){ 185 186 if(map.layers[i].isBaseLayer) { 187 //bLayer = map.layers[i]; 188 console.log(map.layers[i].name + ' ' + i + ' blayer'); 189 } else { 190 //map.layers[i].destroy(true); 191 console.log(map.layers[i].name + ' ' + i + 'non blayer'); 192 } 193 map.layers[i].destroy(true); 194 } 195 196 197 //map.removeLayer(layer); 198 } 199 200 console.log(map.layers); 201 for(var i=0; i < map.getNumLayers(); i++) { 202 if(map.layers[i]){ 203 204 if(map.layers[i].isBaseLayer) { 205 //bLayer = map.layers[i]; 206 console.log(map.layers[i].name + ' ' + i + ' blayer'); 207 } else { 208 //map.layers[i].destroy(true); 209 console.log(map.layers[i].name + ' ' + i + 'non blayer'); 210 } 211 map.layers[i].destroy(true); 212 } 213 214 215 //map.removeLayer(layer); 216 } 217 218 console.log(map.layers); 219 //this.layer.map.removeLayer(this.layer); 220 //updateStatus(map.layers.length); 221 //add new layers 222 map.addLayers(obj.layers); 223 //if(!map.baseLayer)map.setBaseLayer(map.layers[0]); 224 225 //zoom to context extent 226 map.zoomToExtent(obj.bounds); 227 228 if(obj.resolution && obj.center) { 229 //zoom = map.getZoomForResolution(obj.resolution, true); 230 //map.setCenter(obj.center, zoom); 231 } 232 myObj = obj; 233 234 } 235 236 function loadFailure(request) { 237 updateStatus("failed to load"); 238 } 239 function updateStatus(msg) { 240 var element = document.getElementById('output'); 241 element.value = msg; 242 } 115 243 116 244 // --> … … 119 247 <body onload="init()"> 120 248 <div id="map"></div> 121 <div id="queryOut"></div> 122 249 <!--<div id="queryOut"></div>--> 250 <div id="text"> 251 To automatically set your map from a Map Context choose in this list: 252 <ul> 253 <li><a href="javascript:setContext('us');">United States set</a></li> 254 <li><a href="javascript:setContext('tasmania');">Tasmania set</a></li> 255 <li><a href="javascript:setContext('europa');">European set</a></li> 256 </ul> 257 <div><a href="javascript:updateStatus(wmc.write(map))">get actual map as WMC</a></div> 258 <textarea id="output"></textarea> 259 </div> 123 260 124 261 </body> sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMSManager.js
r5264 r5324 169 169 this.switchPanel(); 170 170 this.maximizeControl(); 171 172 //forcing panel height and scroll 173 this.div.style.height = this.map.size.h - 100; 174 171 175 return this.div; 172 176 }, … … 267 271 for(j=0;j<aLayersName.length;j++){ 268 272 var selectedLayer = aLayersName[j]; 269 for(y=0;y<layer.aWMSLayers.length;y++){ 270 var legendUrl = null; 271 var listedLayer = layer.aWMSLayers[y]; 272 if(selectedLayer==listedLayer[0]) { 273 //list of layer titles 274 /* 275 layerTitle +=(layerTitle.length>0)? 276 ', ' + '[' + listedLayer[0] + '] ' + listedLayer[1] 277 : '[' + listedLayer[0] + '] ' + listedLayer[1]; 273 if(layer.aWMSLayers){ 274 for(y=0;y<layer.aWMSLayers.length;y++){ 275 var legendUrl = null; 276 var listedLayer = layer.aWMSLayers[y]; 277 if(selectedLayer==listedLayer[0]) { 278 //list of layer titles 279 /* 280 layerTitle +=(layerTitle.length>0)? 281 ', ' + '[' + listedLayer[0] + '] ' + listedLayer[1] 282 : '[' + listedLayer[0] + '] ' + listedLayer[1]; 283 284 //show if queryable 285 if(listedLayer[5]==1) layerTitle +=' (q)'; 286 */ 278 287 279 //show if queryable 280 if(listedLayer[5]==1) layerTitle +=' (q)'; 281 */ 282 283 var li = document.createElement('li'); 284 li.innerHTML = '[' + listedLayer[0] + '] ' + listedLayer[1]; 285 if(listedLayer[5]==1) li.innerHTML +=' (q)'; 286 layerUl.appendChild(li); 287 288 289 290 //find layers extents 291 if(listedLayer[3].length==4){ 292 aExtents.push(listedLayer[3]);//bounding boxes 293 } else if(listedLayer[3].split){ 294 var bbox = listedLayer[3].split(','); 295 aExtents.push(bbox);//bounding boxes 296 } else alert('wrong bbox: '+listedLayer[3]) 288 var li = document.createElement('li'); 289 li.innerHTML = '[' + listedLayer[0] + '] ' + listedLayer[1]; 290 if(listedLayer[5]==1) li.innerHTML +=' (q)'; 291 layerUl.appendChild(li); 292 293 294 295 //find layers extents 296 if(listedLayer[3].length==4){ 297 aExtents.push(listedLayer[3]);//bounding boxes 298 } else if(listedLayer[3].split){ 299 var bbox = listedLayer[3].split(','); 300 aExtents.push(bbox);//bounding boxes 301 } else alert('wrong bbox: '+listedLayer[3]) 302 } 297 303 } 298 304 } … … 447 453 for(j=0;j<aLayersName.length;j++){ 448 454 var selectedLayer = aLayersName[j]; 449 for(y=0;y<layer.aWMSLayers.length;y++){ 450 var legendUrl = null; 451 var listedLayer = layer.aWMSLayers[y]; 452 if(selectedLayer==listedLayer[0]) { 453 454 //set legend url 455 legendName = listedLayer[0]; 456 legendTitle = listedLayer[1]; 457 legendAbstract = listedLayer[2]; 458 legendQueriable = listedLayer[5]; 459 legendUrl = listedLayer[4]; 460 sldService = listedLayer[6]; 461 462 463 var legendSpan = document.createElement("span"); 464 var mess = '<table><tr><th>Name</th><td> '+ legendName + '</td></tr>' + 465 '<tr><th>Title</th><td>'+legendTitle +'</td></tr>' + 466 '<tr><th>Abstract</th><td>'+ legendAbstract +'</td></tr>' + 467 '<tr><th>Queryable</th><td>'+legendQueriable + '</td></tr>'; 455 if(layer.aWMSLayers){ 456 for(y=0;y<layer.aWMSLayers.length;y++){ 457 var legendUrl = null; 458 var listedLayer = layer.aWMSLayers[y]; 459 if(selectedLayer==listedLayer[0]) { 460 461 //set legend url 462 legendName = listedLayer[0]; 463 legendTitle = listedLayer[1]; 464 legendAbstract = listedLayer[2]; 465 legendQueriable = listedLayer[5]; 466 legendUrl = listedLayer[4]; 467 sldService = listedLayer[6]; 468 468 469 469 470 if(legendUrl){ 471 mess += '<tr><th>Image</th><td><img src="'+legendUrl + '"></td></tr>'; 472 //'<h5>Legend Image:</h5><img src="'+legendUrl+'">'; 473 //var legendImg = document.createElement("img"); 474 //legendImg.src =legendUrl; 475 //legendSpan.appendChild(legendImg); 476 }else { 477 mess += '<tr><th>Image</th><td>none</td></tr>'; 478 } 479 480 481 482 legendSpan.innerHTML = mess + '</tr></table>'; 483 484 //TODO check id SLDManager is in Control LIST 485 var controls = this.map.controls; 486 var SLDManager; 487 for(z=0;z<controls.length;z++){ 488 var control = controls[z]; 489 if(control.CLASS_NAME == 'OpenLayers.Control.SLDManager'){ 490 SLDManager = control; 491 } 492 } 493 if(SLDManager && sldService){ 494 var sldman = document.createElement('div'); 495 sldman.className = 'sldman'; 496 var sldButton = document.createElement('button'); 497 sldButton.innerHTML = 'change SLD'; 498 sldButton.map = this.map; 499 sldButton.layerName = selectedLayer; 500 sldButton.layer = layer; 501 sldButton.SLDManager = SLDManager; 502 console.log('service 3:' + this.sldService); 503 sldButton.sldService = this.sldService; 504 sldButton.target = sldman; 505 sldButton.legendSpan = legendSpan; 506 sldButton.onclick = function(){ 507 this.SLDManager.updateTarget(this.target); 508 this.SLDManager.redraw(this); 509 this.SLDManager.activeColor = this.activeColor; 510 this.SLDManager.legendSpan = this.legendSpan; 511 this.SLDManager.layer = this.layer; 512 this.style.visibility = 'hidden'; 513 514 }; 515 //sldButton.onclick = function(){this.SLDManager.redraw(this)}; 516 //new OpenLayers.Control.SLDManager($('queryOut')) 517 legendSpan.appendChild(sldman); 518 legendSpan.appendChild(sldButton); 519 } 520 521 522 legendImages.appendChild(legendSpan); 523 legendImages.style.display = 'block'; 524 470 var legendSpan = document.createElement("span"); 471 var mess = '<table><tr><th>Name</th><td> '+ legendName + '</td></tr>' + 472 '<tr><th>Title</th><td>'+legendTitle +'</td></tr>' + 473 '<tr><th>Abstract</th><td>'+ legendAbstract +'</td></tr>' + 474 '<tr><th>Queryable</th><td>'+legendQueriable + '</td></tr>'; 525 475 526 476 527 477 if(legendUrl){ 478 mess += '<tr><th>Image</th><td><img src="'+legendUrl + '"></td></tr>'; 479 //'<h5>Legend Image:</h5><img src="'+legendUrl+'">'; 480 //var legendImg = document.createElement("img"); 481 //legendImg.src =legendUrl; 482 //legendSpan.appendChild(legendImg); 483 }else { 484 mess += '<tr><th>Image</th><td>none</td></tr>'; 485 } 486 487 488 489 legendSpan.innerHTML = mess + '</tr></table>'; 490 491 //TODO check id SLDManager is in Control LIST 492 var controls = this.map.controls; 493 var SLDManager; 494 for(z=0;z<controls.length;z++){ 495 var control = controls[z]; 496 if(control.CLASS_NAME == 'OpenLayers.Control.SLDManager'){ 497 SLDManager = control; 498 } 499 } 500 if(SLDManager && sldService){ 501 var sldman = document.createElement('div'); 502 sldman.className = 'sldman'; 503 var sldButton = document.createElement('button'); 504 sldButton.innerHTML = 'change SLD'; 505 sldButton.map = this.map; 506 sldButton.layerName = selectedLayer; 507 sldButton.layer = layer; 508 sldButton.SLDManager = SLDManager; 509 console.log('service 3:' + this.sldService); 510 sldButton.sldService = this.sldService; 511 sldButton.target = sldman; 512 sldButton.legendSpan = legendSpan; 513 sldButton.onclick = function(){ 514 this.SLDManager.updateTarget(this.target); 515 this.SLDManager.redraw(this); 516 this.SLDManager.activeColor = this.activeColor; 517 this.SLDManager.legendSpan = this.legendSpan; 518 this.SLDManager.layer = this.layer; 519 this.style.visibility = 'hidden'; 520 521 }; 522 //sldButton.onclick = function(){this.SLDManager.redraw(this)}; 523 //new OpenLayers.Control.SLDManager($('queryOut')) 524 legendSpan.appendChild(sldman); 525 legendSpan.appendChild(sldButton); 526 } 527 528 529 legendImages.appendChild(legendSpan); 530 legendImages.style.display = 'block'; 531 532 533 534 535 } 528 536 } 529 } 530 531 } 532 537 538 } 539 } 533 540 legendTools.appendChild(legendImages); 534 541 … … 682 689 683 690 //HACK HACK HACK - find a way to auto-size this layerswitcher 684 this.div.style.width = " 20em";691 this.div.style.width = "30em"; 685 692 this.div.style.height = ""; 686 693 … … 795 802 this.olCatalogue = document.createElement("div"); 796 803 this.olCatalogue.className = "olCatalogue"; 804 this.olCatalogue.style.height = this.map.size.h - 130; 797 805 798 806 this.catalogueLog = document.createElement('p'); … … 848 856 this.olServerList = document.createElement("div"); 849 857 this.olServerList.className = "olServerList"; 858 this.olServerList.style.height = this.map.size.h - 130; 859 850 860 var p = document.createElement('p'); 851 861 //p.innerHTML = 'Use the select box here below to choose a server. Wait for remote response.'; … … 930 940 this.olLegend = document.createElement("div"); 931 941 this.olLegend.className = "olLegend"; 942 this.olLegend.style.height = this.map.size.h - 130; 943 932 944 933 945 this.layersDiv.appendChild(this.olLayerManagerHeader); sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Format/WMC.js
r5061 r5324 24 24 * {String} default Name Space for OGC WMC version 1.1 25 25 */ 26 WMC_NS: 'http://www.openg eospatial.net/context',//http://www.opengeospatial.net/context26 WMC_NS: 'http://www.opengis.net/context context.xsd',//http://www.opengeospatial.net/context 27 27 28 28 /** … … 73 73 //PARSE MAP 74 74 console.log('parse map'); 75 console.log(context); 75 76 76 77 OLContext.id = context.getAttribute('id'); … … 126 127 srs = srss[0];//bad choice - forcing to first srs available 127 128 129 //get format value <FormatList> 130 var formatList = this.findChildByName(layer,'FormatList'); 131 //var formats = this.findChildrenByName(formatList,'Format'); 132 var format = 'image/png'; 133 if(formatList) format = this.concatChildValues(this.findChildByName(formatList,'Format')); 134 /*if(formats){ 135 for(aa=0;aa<formats.length;aa++){ 136 var mFormat = formats[aa]; 137 if(mFormat.getAttribute('current')=='1'){ 138 format = this.concatChildValues(mFormat); 139 } 140 } 141 }*/ 142 128 143 //GET server values 129 144 var server = this.findChildByName(layer,'Server'); … … 140 155 layer.params = {}; 141 156 layer.params.LAYERS = name; 142 layer.params.FORMAT = 'png';157 layer.params.FORMAT = format; 143 158 layer.params.SERVICE = 'WMS'; 144 159 layer.params.VERSION = version; … … 173 188 var OLON = OpenLayers.Class.serialize(map); 174 189 175 176 var wmc = this.createElementNS(this.WMC_NS, 177 "ViewContext"); 190 /*VIEWCONTEXT 191 * <ViewContext version="1.0.0" 192 id="eos_data_gateways" 193 xmlns="http://www.opengis.net/context" 194 xmlns:xlink="http://www.w3.org/1999/xlink" 195 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 196 xsi:schemaLocation="http://www.opengis.net/context context.xsd"> 197 */ 198 //this.WMC_NS 199 var wmc = this.createElementNS('', "ViewContext"); 200 //var wmc = document.createElement( "ViewContext"); 178 201 wmc.setAttribute('id', 'hardcoded id'); 179 202 wmc.setAttribute('version', 'hardcoded version'); 203 wmc.setAttribute('xmlns','http://www.opengis.net/context'); 204 wmc.setAttribute('xmlns:xlink','http://www.w3.org/1999/xlink'); 205 wmc.setAttribute('xmlns:xsi','http://www.w3.org/2001/XMLSchema-instance'); 206 wmc.setAttribute('xsi:schemaLocation',this.WMC_NS); 207 180 208 181 209 //GENERAL SECTION sandbox/ominiverdi/ows/OWSManager/theme/OWSManager/owsmanager.css
r5222 r5324 32 32 /*width:100%; 33 33 height:100%;*/ 34 width:18em; 34 width:28em; 35 overflow:auto; 36 color:white; 35 37 36 38 } … … 101 103 border-top:2px solid white; 102 104 border-bottom:2px solid white; 103 width:15em; 105 /*width:15em;*/ 106 color:rgb(240,254,254); 104 107 } 105 108 .olLegendLegendImages th{
