[OpenLayers-Commits] r3148 - sandbox/ominiverdi/openlayers/lib/OpenLayers/Control

commits at openlayers.org commits at openlayers.org
Sun May 13 11:52:52 EDT 2007


Author: ominiverdi
Date: 2007-05-13 11:52:49 -0400 (Sun, 13 May 2007)
New Revision: 3148

Modified:
   sandbox/ominiverdi/openlayers/lib/OpenLayers/Control/WMSManager.js
Log:
WMSManager (ticket #687): 
added:
WMS legend images per OL layer

Modified: sandbox/ominiverdi/openlayers/lib/OpenLayers/Control/WMSManager.js
===================================================================
--- sandbox/ominiverdi/openlayers/lib/OpenLayers/Control/WMSManager.js	2007-05-13 13:57:27 UTC (rev 3147)
+++ sandbox/ominiverdi/openlayers/lib/OpenLayers/Control/WMSManager.js	2007-05-13 15:52:49 UTC (rev 3148)
@@ -154,7 +154,41 @@
             var baseLayer = layer.isBaseLayer;
 
             if (baseLayer || layer.displayInLayerSwitcher) {
-
+				
+				//GET LAYER INFOS from WMS array
+				// set gently layer Name	
+				var layerName= null;
+							
+				//create legend if exists
+				var legendImgs = document.createElement("div");
+				legendImgs.style.paddingLeft ='10px';
+				var aLayersName = layer.name.split(',');
+				for(j=0;j<aLayersName.length;j++){
+					var selectedLayer = aLayersName[j];
+					for(y=0;y<layer.aWMSLayers.length;y++){
+						var legendUrl = null;
+						var listedLayer = layer.aWMSLayers[y];
+						if(selectedLayer==listedLayer[0]) {
+							if(layerName)layerName = layerName + ', ' + listedLayer[1];//list of layer titles
+							else layerName =  listedLayer[1];//list of layer titles
+							legendUrl = listedLayer[4];
+							//alert(legendUrl);
+						}
+						if(legendUrl){
+							var legendImg = document.createElement("img");
+							legendImg.src =legendUrl;
+							legendImgs.appendChild(legendImg);
+							var legendSpan = document.createElement("span");
+							legendSpan.innerHTML = listedLayer[1];//layer title;
+							legendImgs.appendChild(legendSpan);
+							var br = document.createElement("br");
+							legendImgs.appendChild(br);
+						}
+					}
+				
+				}
+				
+				
                 if (!baseLayer) {
                     containsOverlays = true;
                 }
@@ -186,7 +220,8 @@
                 if (!baseLayer && !layer.inRange) {
                     labelSpan.style.color = "gray";
                 }
-                labelSpan.innerHTML = layer.name;
+                //labelSpan.innerHTML = layer.name;
+				labelSpan.innerHTML = 	layerName;
                 labelSpan.style.verticalAlign = (baseLayer) ? "bottom" : "baseline";
                 OpenLayers.Event.observe(labelSpan, "click", 
                               this.onInputClick.bindAsEventListener(inputElem));
@@ -262,10 +297,12 @@
 									if(startZ==1)return alert("this is already the top");
 									this.layer.map.raiseLayer(this.layer,1);
 								}				
-								
 				
 				
 				
+				
+				
+				
                 var groupArray = (baseLayer) ? this.baseLayerInputs
                                              : this.dataLayerInputs;
                 groupArray.push(inputElem);
@@ -288,6 +325,7 @@
 					layerDiv.appendChild(aSwitchDown);
 					layerDiv.appendChild(aSwitchUp);
 				}
+				layerDiv.appendChild(legendImgs);
 				
 				
 				//append to group div
@@ -786,9 +824,17 @@
 			
 			
 			//Legend sta dentro Style
-			var legendNode = this.findChildByName(aLayers[i],'LegendURL');
-			if(legendNode) var LegendURL =(legendNode.textContent)? legendNode.textContent:legendNode.text;
-			else var LegendURL = null;
+				var LegendURL = null;
+				
+				var legendNode = aLayers[i].getElementsByTagName('LegendURL')[0];
+				if(legendNode) {
+					var OnlineResourceNode = this.findChildByName(legendNode,'OnlineResource');
+					if(OnlineResourceNode){
+						 LegendURL = OnlineResourceNode.getAttribute('xlink:href');
+						//alert(LegendURL);
+					}
+					
+				}
 			
 			
 			var bboxNode = this.findChildByName(aLayers[i],'BoundingBox');
@@ -1012,8 +1058,8 @@
 				else titleA.push(select2.options[i].text);
 			}
 		}
-		 if(layerA.length) var layer = layerA.join(',');
-		 else layer ="";
+		 if(layerA.length) var layerName = layerA.join(',');
+		 else layerName ="";
 		 if(titleA.length) var title = titleA.join(', ');
 		 else title = layer;
 		 
@@ -1021,7 +1067,7 @@
 			 alert('no server selected. please select one.');
 			 return;
 		 }
-		 if(layer.length<1) {
+		 if(layerName.length<1) {
 			 alert('no layer selected. please select one.');
 			 return;
 		 }
@@ -1043,6 +1089,23 @@
 		 */
 		
 		
+		//get selected layers features
+		var aExtents = [];
+		var aLegendUrl = [];
+		var aWMSLayers = [];
+		for(i=0;i<layerA.length;i++){
+			
+			for(j=0;j<this.WMSManager.aWMSLayers.length;j++){
+				var checkedLayer = layerA[i];
+				var listedLayer = this.WMSManager.aWMSLayers[j];
+				if(checkedLayer==listedLayer[0]) {
+					aExtents.push(listedLayer[3]); 
+					aLegendUrl.push(listedLayer[4]);
+					aWMSLayers.push(listedLayer);
+				}
+			}
+		}
+		//alert(aLegendUrl);
 		
 		//set base or overlay
 		var overlayButton = $('wmsLayerButton');
@@ -1065,15 +1128,18 @@
 		*/
 		
 		if(overlayButton.checked){
-			var layer = new OpenLayers.Layer.WMS( title, 
-                    url, {layers: layer,format: "image/png",TRANSPARENT: "TRUE", EXCEPTIONS: exception} );
+			var layer = new OpenLayers.Layer.WMS( layerName, 
+                    url, {layers: layerName,format: "image/png",TRANSPARENT: "TRUE", EXCEPTIONS: exception} );
 			layer.isBaseLayer = false; 
+			layer.aWMSLayers = aWMSLayers;
 			//layer.TRANSPARENT = true; 
 			this.WMSManager.map.addLayer(layer);
 		} else {
-			var layer = new OpenLayers.Layer.WMS( title, 
-                    url, {layers: layer,format: "image/png", EXCEPTIONS: exception} );
+			var layer = new OpenLayers.Layer.WMS( layerName, 
+                    url, {layers: layerName,format: "image/png", EXCEPTIONS: exception} );
 			layer.isBaseLayer = true; //BaseLayer : Overlay
+			
+			layer.aWMSLayers = aWMSLayers;
 			this.WMSManager.map.addLayer(layer);
 			this.WMSManager.map.setBaseLayer(layer, true);
     	    this.WMSManager.map.events.triggerEvent("changebaselayer");
@@ -1081,19 +1147,8 @@
 		
 		
 		
+		
 		//set viewport - zoom to extent of current layer
-		/*
-		 * need to set the exact extent of the layer and not 
-		 * just the first extent of the getCapabilites response
-		 */
-		var aExtents = [];
-		for(i=0;i<layerA.length;i++){
-			for(j=0;j<this.WMSManager.aWMSLayers.length;j++){
-				var checkedLayer = layerA[i];
-				var listedLayer = this.WMSManager.aWMSLayers[j];
-				if(checkedLayer==listedLayer[0]) aExtents.push(listedLayer[3]); 
-			}
-		}
 		//var ext = this.WMSManager.extent;
 		var bounds = null;
 		for(i=0;i<aExtents.length;i++){



More information about the Commits mailing list