[OpenLayers-Commits] r5096 - in sandbox/ominiverdi/ows/OWSManager: examples lib/OpenLayers/Control theme theme/OWSManager
commits at openlayers.org
commits at openlayers.org
Thu Nov 1 16:51:41 EDT 2007
Author: ominiverdi
Date: 2007-11-01 16:51:39 -0400 (Thu, 01 Nov 2007)
New Revision: 5096
Added:
sandbox/ominiverdi/ows/OWSManager/examples/wms_manager.html
sandbox/ominiverdi/ows/OWSManager/examples/wms_manager_abs.html
sandbox/ominiverdi/ows/OWSManager/examples/wms_manager_stile.html
sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/SLDManager.js
sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMCExporter.js
sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMSArgParser.js
sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMSExporter.js
sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMSManager.js
sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMSPermalink.js
sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMSQuery.js
sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMSToolbar.js
sandbox/ominiverdi/ows/OWSManager/theme/OWSManager/
sandbox/ominiverdi/ows/OWSManager/theme/OWSManager/owsmanager.css
Log:
OWSManager: SLD module added
Added: sandbox/ominiverdi/ows/OWSManager/examples/wms_manager.html
===================================================================
--- sandbox/ominiverdi/ows/OWSManager/examples/wms_manager.html (rev 0)
+++ sandbox/ominiverdi/ows/OWSManager/examples/wms_manager.html 2007-11-01 20:51:39 UTC (rev 5096)
@@ -0,0 +1,98 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <style type="text/css">
+ #map {
+ width: 800px;
+ height: 475px;
+ border: 1px solid black;
+ }
+ #queryOut {
+ width:800px;
+ height: 200px;
+ border: 1px solid black;
+ position:absolute;
+ left:10px;
+ top:500px;
+ overflow:auto;
+ }
+ </style>
+
+ <script src="../lib/OpenLayers.js"></script>
+ <script src="../lib/OpenLayers/Control/WMSManager.js"></script>
+
+ <script src="../lib/OpenLayers/Control/WMSToolbar.js"></script>
+ <script src="../lib/OpenLayers/Control/WMSExporter.js"></script>
+ <script src="../lib/OpenLayers/Control/WMSPermalink.js"></script>
+ <script src="../lib/OpenLayers/Control/WMSQuery.js"></script>
+ <script src="../lib/OpenLayers/Control/SLDManager.js"></script>
+ <link href="../theme/OWSManager/owsmanager.css" rel="stylesheet" type="text/css" media="all" />
+
+ <!--<script src="../lib/sarissa/sarissa.js"></script>-->
+ <script type="text/javascript">
+ <!--
+
+ var map;
+
+ function init(){
+ OpenLayers.ProxyHost = "/cgi-bin/proxy.cgi?url=";//ominiverdi.org
+ //OpenLayers.ProxyHost="proxy.cgi?url=";//dev.openlayers.org
+ // OpenLayers.ProxyHost="http://www.openlayers.org/proxy/?url=";//www.openlayers.org
+
+ map = new OpenLayers.Map( $('map') );
+
+ var aWMSServers=new Array(
+ ['OpenLayers WMS','http://labs.metacarta.com/cgi-bin/mapserv?map=/www/labs/map/vmap0.map'],//content type: application/vnd.ogc.wms_xml
+ ['World - NASA Blue Marble Next Generation','http://wms.jpl.nasa.gov/wms.cgi?'],
+ ['World - esa','http://mapserv2.esrin.esa.it/cubestor/cubeserv/cubeserv.cgi?'],// no layers shown in list
+ ['World - Demis World Map','http://www2.demis.nl/mapserver/Request.asp?'],
+ ['Tilecache at OpenPlans','http://sigma.openplans.org/tilecache-1.3/tilecache.py?'],
+ ['FAO','http://193.43.36.137/ows/14110'],
+ ['NATO','http://geos2.nurc.nato.int/geoserver/wms'],
+ ['Kappa','http://149.139.8.29/geoserver/wms?'],
+ ['CubeWerx','http://demo.cubewerx.com/demo/cubeserv/cubeserv.cgi?config=main&'],
+ ['QGIS WMS server at ethz.ch','http://karlinapp.ethz.ch/fcgi-bin/qgis_wms_dir/europe/qgis_wms_serv.fcgi?'],
+ ['AU - Aims Australia','http://adc.aims.gov.au:9555/atlas/SstWmsServer?'],
+ ['BR - Unidades de Conservacao do Brasil (dados preliminares)','http://mapas.mma.gov.br/cgi-bin/mapserv?map=/opt/www/html/webservices/ucs.map&'],
+ ['SP - IGN','http://www.idee.es/wms/IDEE-Base/IDEE-Base'],
+ ['SP - Catalunya - ICC Web Map Service','http://shagrat.icc.es/lizardtech/iserv/ows?'],
+ ['SP - Junta Andalucia','http://www.andaluciajunta.es/IDEAndalucia/IDEAwms/wms/MTA100v?'],
+ ['SP - Aragon', 'http://sitar.aragon.es/AragonWMS?'],
+ ['SP - Asturias','http://www.cartografia.asturias.es/wmsortofotos/request.asp?'],
+ ['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?'],
+ //['SP - Comunidad Valenciana ','http://icvmapas.cetesi.gva.es/wms?'],//only spanish projection
+ //['SP - Castilla La Mancha','http://161.67.10.126/cgi-bin/mapserv?map=/usr/local/webmapping/ideclm/mapserver/ideclm.map'],//only spanish projection
+ //['SP - Cantabria','http://www.idee.es/wms/WMS-Cantabria/WMS-Cantabria?'],
+ ['SP - Euskadi (Pais Vasco)','http://www1.euskadi.net/servlet/com.esri.wms.Esrimap?ServiceName=GVasco']
+ //['SP - La Rioja','http://wms.larioja.org/request.asp']
+
+
+
+ //['Localhost','http://localhost/cgi-bin/mapserv?map=mapfile/worldata.map']
+ //['OpenPlans WMS','http://sigma.openplans.org:3128/geoserver/wms']
+
+ );
+
+ map.addControl( new OpenLayers.Control.WMSManager(aWMSServers ) );
+
+ //map.addControl(new OpenLayers.Control.NavToolbar());
+ var queryTarget = $('queryOut');
+ WMSToolbar = new OpenLayers.Control.WMSToolbar({queryTarget: queryTarget});
+ map.addControl(WMSToolbar);
+ map.addControl(new OpenLayers.Control.WMSPermalink());
+ map.addControl(new OpenLayers.Control.WMSExporter());
+
+ //map.addControl(new OpenLayers.Control.OverviewMap());
+
+
+ }
+
+ // -->
+ </script>
+ </head>
+ <body onload="init()">
+
+ <div id="map"></div>
+ <div id="queryOut"></div>
+
+ </body>
+</html>
Added: sandbox/ominiverdi/ows/OWSManager/examples/wms_manager_abs.html
===================================================================
--- sandbox/ominiverdi/ows/OWSManager/examples/wms_manager_abs.html (rev 0)
+++ sandbox/ominiverdi/ows/OWSManager/examples/wms_manager_abs.html 2007-11-01 20:51:39 UTC (rev 5096)
@@ -0,0 +1,57 @@
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<style type="text/css">
+ #map {
+ width: 800px;
+ height: 475px;
+ border: 1px solid black;
+ }
+ #queryOut {
+ width:800px;
+ height: 200px;
+ border: 1px solid black;
+ position:absolute;
+ left:10px;
+ top:500px;
+ overflow:auto;
+ }
+</style>
+<script src="http://www.openlayers.org/api/OpenLayers.js"></script>
+<script src="http://www.ominiverdi.org/openlayers/nightly/openlayers/build/WMSManager.js"></script>
+<script type="text/javascript">
+<!--
+ var map;
+ function init(){
+
+ OpenLayers.ProxyHost = "/cgi-bin/proxy.cgi?url=";
+
+ map = new OpenLayers.Map( $('map') );
+
+ var aWMSServers=new Array(
+ ['OpenLayers WMS (UMN mapserver)','http://labs.metacarta.com/cgi-bin/mapserv?map=/www/labs/map/vmap0.map'],
+ ['NASA Blue Marble (???)','http://wms.jpl.nasa.gov/wms.cgi?'],
+ ['Demis World Map (UMN Mapserver)','http://www2.demis.nl/mapserver/Request.asp?'],
+ ['FAO (UMN Mapserver)','http://193.43.36.137/ows/14110'],
+ ['BR - Unidades de Conservacao do Brasil (dados preliminares)','http://mapas.mma.gov.br/cgi-bin/mapserv?map=/opt/www/html/webservices/ucs.map&'],
+ ['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?']
+ );
+ map.addControl( new OpenLayers.Control.WMSManager(aWMSServers ) );
+
+ //map.addControl(new OpenLayers.Control.NavToolbar());
+ var queryTarget = $('queryOut');
+ WMSToolbar = new OpenLayers.Control.WMSToolbar({queryTarget: queryTarget});
+ map.addControl(WMSToolbar);
+ map.addControl(new OpenLayers.Control.WMSPermalink());
+ map.addControl(new OpenLayers.Control.WMSExporter());
+ }
+ // -->
+</script>
+<link rel="stylesheet" type="text/css" href="http://www.ominiverdi.org/openlayers/nightly/openlayers/theme/default/style.css"></style>
+</head>
+<body onload="init()">
+ <div id="map"></div>
+ <div id="queryOut"></div>
+</body>
+</html>
+
Added: sandbox/ominiverdi/ows/OWSManager/examples/wms_manager_stile.html
===================================================================
--- sandbox/ominiverdi/ows/OWSManager/examples/wms_manager_stile.html (rev 0)
+++ sandbox/ominiverdi/ows/OWSManager/examples/wms_manager_stile.html 2007-11-01 20:51:39 UTC (rev 5096)
@@ -0,0 +1,116 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <style type="text/css">
+ #map {
+ width: 800px;
+ height: 375px;
+ border: 1px solid black;
+ }
+ #queryOut {
+ width:800px;
+ height: 200px;
+ border: 1px solid black;
+ position:absolute;
+ left:10px;
+ top:400px;
+ overflow:auto;
+ }
+ </style>
+
+ <script src="../lib/OpenLayers.js"></script>
+
+ <script src="../lib/OpenLayers/Control/WMSManager.js"></script>
+
+ <script src="../lib/OpenLayers/Control/WMSToolbar.js"></script>
+ <script src="../lib/OpenLayers/Control/WMSExporter.js"></script>
+ <script src="../lib/OpenLayers/Control/WMSPermalink.js"></script>
+ <script src="../lib/OpenLayers/Control/WMSQuery.js"></script>
+ <script src="../lib/OpenLayers/Control/WMCexporter.js"></script>
+ <link href="../theme/OWSManager/owsmanager.css" rel="stylesheet" type="text/css" media="all" />
+
+
+ <script src="../lib/OpenLayers/Control/SLDManager.js"></script>
+ <script type="text/javascript">
+ <!--
+
+ var map;
+ var WMSToolbar;
+ var SLDManager;
+
+ function init(){
+ OpenLayers.ProxyHost = "/cgi-bin/proxy.cgi?url=";//ominiverdi.org
+ //OpenLayers.ProxyHost="proxy.cgi?url=";//dev.openlayers.org
+ // OpenLayers.ProxyHost="http://www.openlayers.org/proxy/?url=";//www.openlayers.org
+
+ map = new OpenLayers.Map( $('map') );
+
+ var aWMSServers=new Array(
+ ['kappu','http://192.168.1.8:8080/geoserver/wms?'],
+ ['FAO - GAUL','http://149.139.8.29/cgi-bin/wms.sh'],
+ ["OpenLayers WMS-C", "http://labs.metacarta.com/wms-c/Basic.py?"],
+ ['OpenLayers WMS','http://labs.metacarta.com/cgi-bin/mapserv?map=/www/labs/map/vmap0.map'],//content type: application/vnd.ogc.wms_xml
+ ['World - NASA Blue Marble Next Generation','http://wms.jpl.nasa.gov/wms.cgi?'],
+ ['World - esa','http://mapserv2.esrin.esa.it/cubestor/cubeserv/cubeserv.cgi?'],// no layers shown in list
+ ['World - Demis World Map','http://www2.demis.nl/mapserver/Request.asp?'],
+ ['Tilecache at OpenPlans','http://sigma.openplans.org/tilecache-1.3/tilecache.py?'],
+ ['FAO','http://193.43.36.137/ows/14110'],
+ ['NATO','http://geos2.nurc.nato.int/geoserver/wms'],
+ ['Kappa','http://149.139.8.29/geoserver/wms?'],
+ //[ 'Mumbay - freemap','http://mumbai.freemap.in/tiles?'],
+ ['CubeWerx','http://demo.cubewerx.com/demo/cubeserv/cubeserv.cgi?config=main&'],
+ ['QGIS WMS server at ethz.ch','http://karlinapp.ethz.ch/fcgi-bin/qgis_wms_dir/europe/qgis_wms_serv.fcgi?'],
+ ['AU - Aims Australia','http://adc.aims.gov.au:9555/atlas/SstWmsServer?'],
+ ['BR - Unidades de Conservacao do Brasil (dados preliminares)','http://mapas.mma.gov.br/cgi-bin/mapserv?map=/opt/www/html/webservices/ucs.map&'],
+ ['SP - IGN','http://www.idee.es/wms/IDEE-Base/IDEE-Base'],
+ ['SP - Catalunya - ICC Web Map Service','http://shagrat.icc.es/lizardtech/iserv/ows?'],
+ ['SP - Junta Andalucia','http://www.andaluciajunta.es/IDEAndalucia/IDEAwms/wms/MTA100v?'],
+ ['SP - Aragon', 'http://sitar.aragon.es/AragonWMS?'],
+ ['SP - Asturias','http://www.cartografia.asturias.es/wmsortofotos/request.asp?'],
+ ['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?'],
+ //['SP - Comunidad Valenciana ','http://icvmapas.cetesi.gva.es/wms?'],//only spanish projection
+ //['SP - Castilla La Mancha','http://161.67.10.126/cgi-bin/mapserv?map=/usr/local/webmapping/ideclm/mapserver/ideclm.map'],//only spanish projection
+ //['SP - Cantabria','http://www.idee.es/wms/WMS-Cantabria/WMS-Cantabria?'],
+ ['SP - Euskadi (Pais Vasco)','http://www1.euskadi.net/servlet/com.esri.wms.Esrimap?ServiceName=GVasco']
+ //['SP - La Rioja','http://wms.larioja.org/request.asp']
+
+
+
+ //['Localhost','http://localhost/cgi-bin/mapserv?map=mapfile/worldata.map']
+ //['OpenPlans WMS','http://sigma.openplans.org:3128/geoserver/wms']
+
+ );
+
+ map.addControl( new OpenLayers.Control.WMSManager(aWMSServers ) );
+
+
+
+
+
+
+ //map.addControl(new OpenLayers.Control.NavToolbar());
+ var queryTarget = $('queryOut');
+ WMSToolbar = new OpenLayers.Control.WMSToolbar({queryTarget: queryTarget});
+ map.addControl(WMSToolbar);
+ //alert(WMSToolbar.div.id);
+ //WMSToolbar.style.display = "none";
+ map.addControl(new OpenLayers.Control.WMSPermalink());
+ map.addControl(new OpenLayers.Control.WMSExporter());
+ //map.addControl(new OpenLayers.Control.WMCExporter());
+
+ map.addControl( new OpenLayers.Control.SLDManager($('queryOut')) );
+
+ //map.addControl(new OpenLayers.Control.OverviewMap());
+
+
+ }
+
+
+ // -->
+ </script>
+ </head>
+ <body onload="init()">
+ <div id="map"></div>
+ <div id="queryOut"></div>
+
+ </body>
+</html>
Added: sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/SLDManager.js
===================================================================
--- sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/SLDManager.js (rev 0)
+++ sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/SLDManager.js 2007-11-01 20:51:39 UTC (rev 5096)
@@ -0,0 +1,376 @@
+/* Copyright (c) 2006-2007 MetaCarta, Inc., published under the BSD license.
+ * See http://svn.openlayers.org/trunk/openlayers/release-license.txt
+ * for the full text of the license. */
+
+/**
+ * @class
+ *
+ * @author Lorenzo Becchi (ominiverdi.org)
+ * @projectDescription ticket #687
+ *
+ * @requires OpenLayers/Control.js
+ * @requires OpenLayers/Format/JSON.js
+ */
+OpenLayers.Control.SLDManager = OpenLayers.Class.create();
+OpenLayers.Control.SLDManager.prototype =
+ OpenLayers.Class.inherit( OpenLayers.Control, {
+
+ /** @type String */
+ div: null,
+
+
+ // DOM Elements
+
+
+
+
+ /**
+ * @constructor
+ */
+ initialize: function(targetObj,options) {
+ //OpenLayers.Control.prototype.initialize.apply(this, arguments);
+
+
+ OpenLayers.Format.JSON.prototype.initialize.apply(this, [options]);
+ this.div = targetObj;
+
+ },
+
+ /**
+ *
+ */
+ destroy: function() {
+
+ OpenLayers.Event.stopObservingElement(this.div);
+
+
+ OpenLayers.Control.prototype.destroy.apply(this, arguments);
+ },
+
+ /**
+ * @returns A reference to the DIV DOMElement containing the switcher tabs
+ * @type DOMElement
+ */
+ draw: function() {
+ OpenLayers.Control.prototype.draw.apply(this);
+
+
+
+ // create layout divs
+ // this.loadContents();
+
+ // set mode to minimize
+ //this.minimizeControl();
+ //this.showControls();
+
+ // populate div with current info
+ //this.redraw();
+
+ //this.switchPanel();
+ //this.maximizeControl();
+ return this.div;
+ },
+
+ /**
+ */
+ updateTarget: function(div) {
+ this.div = div;
+ return this.div;
+ },
+
+
+ /** Goes through and takes the current state of the Map and rebuilds the
+ * control to display that state. Groups base layers into a radio-button
+ * group and lists each data layer with a checkbox.
+ *
+ * @returns A reference to the DIV DOMElement containing the control
+ * @type DOMElement
+ */
+ redraw: function(sldButton) {
+ /*
+ * sldButton.map = this.map;
+ sldButton.layer = selectedLayer;
+ sldButton.SLDManager = SLDManager;
+ */
+ //clear out previous layers
+ sldButton.SLDManager.div.innerHTML = "";
+
+ var SLDinterface = document.createElement('div');
+ SLDinterface.className = 'SLDinterface';
+ sldButton.SLDManager.div.appendChild(SLDinterface);
+
+ var SLDmessanger = document.createElement('div');
+ SLDmessanger.className = 'SLDmessanger';
+ SLDmessanger.innerHTML = 'Click on button to retrieve styles';
+ sldButton.SLDManager.div.appendChild(SLDmessanger);
+
+ var SLDblackboard = document.createElement('div');
+ SLDblackboard.className = 'SLDblackboard';
+ SLDblackboard.innerHTML = 'SLDblackboard';
+ sldButton.SLDManager.div.appendChild(SLDblackboard);
+
+ var StyleSeeker = document.createElement('button');
+ StyleSeeker.className = 'StyleSeeker';
+ StyleSeeker.innerHTML = 'get Styles';
+ StyleSeeker.SLDManager = sldButton.SLDManager;
+ StyleSeeker.onclick = function(){this.SLDManager.getSldservice()};
+ SLDblackboard.appendChild(StyleSeeker);
+
+ sldButton.SLDManager.SLDmessanger = SLDmessanger;
+ sldButton.SLDManager.SLDblackboard = SLDblackboard;
+ sldButton.SLDManager.map = sldButton.map;
+ sldButton.SLDManager.layer = sldButton.layer;
+
+
+ return sldButton.SLDManager.div;
+ },
+
+
+
+
+
+
+ /**
+ * @private
+ *
+ * @param {Event} evt
+ */
+ getSldservice: function(evt) {
+ this.SLDblackboard.innerHTML ='';
+ /*
+ var select = this;
+ if((select)) var url = select[select.selectedIndex].value;
+ else url ="";
+
+ if(url.length>0) {
+ this.baseURL = url;
+ } else {
+ alert('no server selected. please select one.');
+ return;
+ }
+ if (this.baseURL.indexOf('?') == -1)
+ {
+ this.baseURL = this.baseURL + '?';
+ }
+ else
+ {
+ if (this.baseURL.charAt( this.baseURL.length - 1 ) == '&')
+ this.baseURL = this.baseURL.slice( 0, -1 );
+ }
+
+ this.baseURL = this.baseURL+ "&service=WMS";
+ this.baseURL = this.baseURL + "&version=1.1.1";
+ this.baseURL = this.baseURL + "&request=GetCapabilities";
+ */
+
+ this.SLDmessanger.innerHTML = "Loading Layers list... please wait...";
+ //$('SLDManagerOutput').innerHTML = this.baseURL;
+ //alert(this.baseURL);
+ this.baseURL = 'http://192.168.1.8:8080/geoserver/sldservice/'+ this.layer;
+ OpenLayers.loadURL(this.baseURL, null, this, this.parseSldservice);
+ },
+
+ /**
+ * @private
+ *
+ * @param {Event} evt
+ */
+ parseSldservice: function(ajaxRequest) {
+ var text = ajaxRequest.responseText;
+
+ var data = OpenLayers.Format.JSON.prototype.read(text);
+ console.log(data);
+
+ //create styles select
+ //Make server select
+ this.styleSelect = document.createElement('select');
+ this.styleSelect.className = 'styleSelect';
+ this.styleSelect.map = this.map;
+ this.styleSelect.layer = this.layer;
+ //this.styleSelect.style.width = "220px";
+ this.styleSelect.onchange = function(){
+ var select = this;
+ var styleName = select[select.selectedIndex].value;
+ console.log('stile name:' + styleName);
+ var olLayerName = this.layer;
+ console.log('olLayerName: '+olLayerName);
+ var olLayer;
+ for( u=0;u < this.map.layers.length;u++){
+ var layer = this.map.layers[u];
+ console.log('layer: '+layer.name);
+ aLayerName = layer.name.split(',');
+ var matched = false;
+ var layerPos;
+ var wmsStyleList= [];
+ var styles = layer.params['STYLES'];
+ var aStyles = styles.split(',');
+ if(aStyles.length == aLayerName.length){
+ for(var zz = 0;zz<aLayerName.length;zz++){
+ if(this.layer==aLayerName[zz]){
+ layerPos = zz;
+ matched = true;
+ aStyles[zz] = styleName;
+ }
+ }
+ } else {
+ aStyles = [];
+ for(var zz = 0;zz<aLayerName.length;zz++){
+ if(this.layer==aLayerName[zz]){
+ layerPos = zz;
+ matched = true;
+ aStyles.push(styleName);
+ } else {
+ aStyles.push('');
+ }
+ }
+ }
+
+
+ if(matched) {
+ olLayer = layer;
+ console.log(olLayer);
+ olLayer.params['STYLES'] = aStyles.join(',');
+ olLayer.redraw();
+ } else {
+ console.log('niente');
+ }
+ }
+
+ };
+ var j = 0;
+ var opt = new Option( 'select a style', '', true, true );
+ this.styleSelect[j++] = opt;
+
+ //form.appendChild(this.styleSelect);
+ for(i=0;i<data.length;i++) {
+ this.styleSelect[j++] = new Option(data[i]['name'],data[i]['name'],false,false);
+ }
+ console.log(this);
+ this.SLDblackboard.innerHTML = '';
+ this.SLDmessanger.innerHTML = '';
+
+ this.SLDblackboard.appendChild(this.styleSelect);
+
+ return data;
+ },
+
+ /**
+ * APIMethod: read
+ * Deserialize an OpenLayers JSON string.
+ *
+ * Parameters:
+ * str - {String} An OLON string
+ * filter - {Function} A function which will be called for every key and
+ * value at every level of the final result. Each value will be
+ * replaced by the result of the filter function. This can be used to
+ * reform generic objects into instances of classes, or to transform
+ * date strings into Date objects.
+ *
+ * Returns:
+ * {Object} An object, array, string, or number.
+ */
+ readJSON: function(str, filter) {
+ var data = OpenLayers.Format.JSON.prototype.read(str, filter);
+ var instance = OpenLayers.Class.deserialize(data);
+ return instance;
+ },
+
+
+
+
+ /** @final @type String */
+ CLASS_NAME: "OpenLayers.Control.SLDManager"
+});
+
+
+ /** Sarissa derived getText
+ *
+ * @private
+ *
+ * @param {Node} XML node
+ * @param {int} deep recursion
+ */
+ OpenLayers.Ajax.getText = function(oNode, deep){
+ var s = "";
+ var nodes = oNode.childNodes;
+ for(var i=0; i < nodes.length; i++){
+ var node = nodes[i];
+ var nodeType = node.nodeType;
+ if(nodeType == Node.TEXT_NODE || nodeType == Node.CDATA_SECTION_NODE){
+ s += node.data;
+ } else if(deep == true
+ && (nodeType == Node.ELEMENT_NODE
+ || nodeType == Node.DOCUMENT_NODE
+ || nodeType == Node.DOCUMENT_FRAGMENT_NODE)){
+ s += OpenLayers.Ajax.getText.getText(node, true);
+ };
+ };
+ return s;
+ };
+
+ /** Sarissa derived getParseErrorText
+ *
+ * @private
+ *
+ * @param {Document} oDoc The target DOM document
+ * @returns The parsing error description of the target Document in
+ * human readable form (preformated text)
+ */
+ OpenLayers.Ajax.PARSED_OK = "Document contains no parsing errors";
+ OpenLayers.Ajax.PARSED_EMPTY = "Document is empty";
+ OpenLayers.Ajax.PARSED_UNKNOWN_ERROR = "Not well-formed or other error";
+
+ OpenLayers.Ajax.getParseErrorText = function(oDoc){
+ //this is only the IE version from Sarissa
+ var parseErrorText = OpenLayers.Ajax.PARSED_OK;
+ if(oDoc && oDoc.parseError && oDoc.parseError.errorCode && oDoc.parseError.errorCode != 0){
+ parseErrorText = "XML Parsing Error: " + oDoc.parseError.reason +
+ "\nLocation: " + oDoc.parseError.url +
+ "\nLine Number " + oDoc.parseError.line + ", Column " +
+ oDoc.parseError.linepos +
+ ":\n" + oDoc.parseError.srcText +
+ "\n";
+ for(var i = 0; i < oDoc.parseError.linepos;i++){
+ parseErrorText += "-";
+ };
+ parseErrorText += "^\n";
+ }
+ else if(oDoc.documentElement == null){
+ parseErrorText = OpenLayers.Ajax.PARSED_EMPTY;
+ };
+ return parseErrorText;
+ };
+
+ /**
+ * Sarissa derived Escape
+ * Escape the given string chacters that correspond to the five predefined XML entities
+ * @param sXml the string to escape
+ */
+ OpenLayers.Ajax.escape = function(sXml){
+ return sXml.replace(/&/g, "&")
+ .replace(/</g, "<")
+ .replace(/>/g, ">")
+ .replace(/"/g, """)
+ .replace(/'/g, "'");
+ };
+ /**
+ * Sarissa derived Unescape
+ * Unescape the given string. This turns the occurences of the predefined XML
+ * entities to become the characters they represent correspond to the five predefined XML entities
+ * @param sXml the string to unescape
+ */
+ OpenLayers.Ajax.unescape = function(sXml){
+ return sXml.replace(/'/g,"'")
+ .replace(/"/g,"\"")
+ .replace(/>/g,">")
+ .replace(/</g,"<")
+ .replace(/&/g,"&");
+ };
+
+ /**
+ * Sarissa node values definition
+ *
+ */
+ if(!window.Node || !Node.ELEMENT_NODE){
+ Node = {ELEMENT_NODE: 1, ATTRIBUTE_NODE: 2, TEXT_NODE: 3, CDATA_SECTION_NODE: 4, ENTITY_REFERENCE_NODE: 5, ENTITY_NODE: 6, PROCESSING_INSTRUCTION_NODE: 7, COMMENT_NODE: 8, DOCUMENT_NODE: 9, DOCUMENT_TYPE_NODE: 10, DOCUMENT_FRAGMENT_NODE: 11, NOTATION_NODE: 12};
+ };
Added: sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMCExporter.js
===================================================================
--- sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMCExporter.js (rev 0)
+++ sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMCExporter.js 2007-11-01 20:51:39 UTC (rev 5096)
@@ -0,0 +1,247 @@
+/* Copyright (c) 2006 MetaCarta, Inc., published under a modified BSD license.
+ * See http://svn.openlayers.org/trunk/openlayers/repository-license.txt
+ * for the full text of the license. */
+
+
+/**
+ * @class
+ *
+ * @requires OpenLayers/Control.js
+ */
+OpenLayers.Control.WMCExporter = OpenLayers.Class.create();
+OpenLayers.Control.WMCExporter.prototype =
+ OpenLayers.Class.inherit( OpenLayers.Control, {
+
+ /** @type DOMElement */
+ element: null,
+
+ /** @type String */
+ base: '',
+
+ /**
+ * @constructor
+ *
+ * @param {DOMElement} element
+ * @param {String} base
+ */
+ initialize: function(element, base) {
+ OpenLayers.Control.prototype.initialize.apply(this, arguments);
+ this.element = OpenLayers.Util.getElement(element);
+ if (base) {
+ this.base = base;
+ }
+ },
+
+ /**
+ *
+ */
+ destroy: function() {
+ if (this.element.parentNode == this.div) {
+ this.div.removeChild(this.element);
+ }
+ this.element = null;
+
+ this.map.events.unregister('moveend', this, this.updateLink);
+
+ OpenLayers.Control.prototype.destroy.apply(this, arguments);
+ },
+
+ /** Set the map property for the control.
+ *
+ * @param {OpenLayers.Map} map
+ */
+ setMap: function(map) {
+ OpenLayers.Control.prototype.setMap.apply(this, arguments);
+
+ //make sure we have an arg parser attached
+ for(var i=0; i< this.map.controls.length; i++) {
+ var control = this.map.controls[i];
+ if (control.CLASS_NAME == "OpenLayers.Control.ArgParser") {
+ break;
+ }
+ }
+ if (i == this.map.controls.length) {
+ this.map.addControl(new OpenLayers.Control.ArgParser());
+ }
+
+ },
+
+ /**
+ * @type DOMElement
+ */
+ draw: function() {
+ OpenLayers.Control.prototype.draw.apply(this, arguments);
+
+ if (!this.element) {
+ this.div.className = this.displayClass;
+ this.element = document.createElement("a");
+ this.element.style.fontSize="smaller";
+ this.element.innerHTML = "WMC Exporter";
+ this.element.href="";
+ this.element.onclick = function() {
+ //alert(this.outstring);
+ var newwindow;
+ //Encode the xml inside the error message
+ encodedHtml = this.outstring;
+ encodedHtml = encodedHtml.replace(/</g,"<");
+ encodedHtml = encodedHtml.replace(/>/g,">");
+ //popup a message windows to let the use copy the error
+ newwindow=window.open('','','menubar=1,scrollbars=1,width=700,height=400,resizable=1') ;
+ //menubar=1,location=1,status=1,
+ newwindow.document.writeln('<html> <head> <title>Error Parsing GetCapabilties<\/title> <\/head> <body><pre><code>');
+ newwindow.document.writeln(encodedHtml);
+ newwindow.document.writeln('<\/code><\/pre> <\/body> <\/html>');
+ newwindow.document.close();
+ return false;
+ };
+ this.div.appendChild(this.element);
+ }
+ this.map.events.register('moveend', this, this.updateLink);
+ return this.div;
+ },
+
+ /**
+ *
+ */
+ updateLink: function() {
+ var center = this.map.getCenter();
+ var zoom = "zoom=" + this.map.getZoom();
+ var lat = "lat=" + Math.round(center.lat*100000)/100000;
+ var lon = "lon=" + Math.round(center.lon*100000)/100000;
+
+ var layers = "layers=";
+ /*for(var i=0; i< this.map.layers.length; i++) {
+ var layer = this.map.layers[i];
+
+ if (layer.isBaseLayer) {
+ layers += (layer == this.map.baseLayer) ? "B" : "0";
+ } else {
+ layers += (layer.getVisibility()) ? "T" : "F";
+ }
+ }*/
+
+ //OpenLayers last build: http://www.openlayers.org/api/OpenLayers.js
+ //WMSManager nightly build: http://www.ominiverdi.org/openlayers/nightly/openlayers/build/OpenLayers.js
+ var header = '{\n';
+ //View Context
+ header += '\t"id":"Map3",\n';
+ header += '\t"version":"1.1",\n';
+
+ //General Section
+
+ var mapBounds = this.map.getExtent();
+
+ header += '\t"General":{\n';
+
+ header += '\t\t"title":"Map3",\n';
+ header += '\t\t"abstract":"Long description of my map",\n';
+ header += '\t\t"KeywordList":"",\n';
+ header += '\t\t"BoundingBox":{"minX":' + mapBounds.left + ',"minY":' + mapBounds.bottom + ',"maxX":' + mapBounds.right + ',"maxY":' + mapBounds.top + ',"srs":"' + this.map.projection + '"},\n';
+ header += '\t\t"Window":{"width":' + this.map.size.w + ',"height":' + this.map.size.h + '},\n';
+ header += '\t\t\n';
+ header += '\t\t"ContactInformation":{}\n';
+ header += '\t\t\n';
+ header += '\t\t"LogoURL":null,\n';
+ header += '\t\t\n';
+ header += '\t\t"DescriptionURL":null,\n';
+ header += '\t\t\n';
+
+ header += '\t},\n';
+ var layers = '\t"LayerList":[\n';
+
+ for(var i=0; i< this.map.layers.length; i++) {
+ var layer = this.map.layers[i];
+ layers += '\t\t{ \n';
+
+ var serverUrl = layer.WMSinfo[1];
+
+ var aParams = layer.WMSinfo[2].split('!!');
+ var srs = null;
+ var format = null;
+ var transparent = null;
+ var exception = null;
+ var service = null;
+ var version = null;
+ var styles = null;
+
+ for(y=0;y<aParams.length;y++){
+ var keyVal = aParams[y].split('!');
+ if(keyVal[0]){
+ if(keyVal[0]=='TRANSPARENT') {
+ if(keyVal[1]=='TRUE') transparent = 'true';
+ else transparent = 'false';
+ }
+ if(keyVal[0]=='FORMAT') {
+ format = keyVal[1];
+ }
+ if(keyVal[0]=='SRS') {
+ srs = keyVal[1];
+ }
+ if(keyVal[0]=='SERVICE') {
+ service = keyVal[1];
+ }
+ if(keyVal[0]=='VERSION') {
+ version = keyVal[1];
+ }
+ if(keyVal[0]=='STYLES') {
+ styles = keyVal[1];
+ }
+ }
+ }
+
+
+ layers += '\t\t"name":"'+ layer.WMSinfo[0] + '",\n';
+ layers += '\t\t"label":"'+ layer.WMSinfo[0] + '",\n';
+ layers += '\t\t"description":"'+ layer.WMSinfo[0] + '",\n';
+ layers += '\t\t"SRS":"' + srs + '",\n';
+
+ layers += '\t\t"queryable":false,\n';
+ layers += '\t\t"resourceId":9,\n';
+ layers += '\t\t"hidden":false,\n';
+ layers += '\t\t"server":{ "service":"WMS", "title":"WMSServer", "onlineResource":{"href":"'+ layer.WMSinfo[1] + '","type":"type1"}, "id":1, "version":"1.1.1"},\n';
+
+ layers += '\t\t"FormatList":[],\n';//Describe one output image format for the Layer.
+ layers += '\t\t"MetadataURL":[],\n';
+ layers += '\t\t"StyleTypeList":[],\n';
+
+
+ layers += '\t\t"transparent":'+transparent+',\n';//?!?? does it exists in mapcontext?
+ //layers += '\t\t\n';
+ //layers += '\t\t\n';
+ layers += '\t\t},\n';
+ /*layers += layer.WMSinfo[0] + '", "';
+ layers += layer.WMSinfo[1];
+ layers += '",{';
+ var aParams = layer.WMSinfo[2].split('!!');
+ for(y=0;y<aParams.length;y++){
+ var keyVal = aParams[y].split('!');
+ if(keyVal[0]){
+ if(keyVal[0]=='TRANSPARENT') {
+ if(keyVal[1]=='TRUE')layers += 'TRANSPARENT : true';
+ else layers += 'TRANSPARENT : false';
+ }
+ else layers += keyVal[0] + ': \'' + keyVal[1] + '\'';
+ if(y<aParams.length-1) layers += ',';
+ }
+ }*/
+
+ /*layers += '\n\t\t map.addLayer(layer' + i + ');';
+ if (layer.isBaseLayer) {
+ layers += '\n\t\t map.setBaseLayer(layer' + i + ');';
+ } else {
+ layers += '\n\t\t layer' + i + '.setVisibility('+layer.getVisibility() +' );';
+ }*/
+
+ }
+
+ layers +='\t],\n';
+
+ var footer = '}';
+
+ this.element.outstring = header + layers + footer;
+
+ },
+
+ /** @final @type String */
+ CLASS_NAME: "OpenLayers.Control.WMCExporter"
+});
Added: sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMSArgParser.js
===================================================================
--- sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMSArgParser.js (rev 0)
+++ sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMSArgParser.js 2007-11-01 20:51:39 UTC (rev 5096)
@@ -0,0 +1,216 @@
+/* Copyright (c) 2006 MetaCarta, Inc., published under a modified BSD license.
+ * See http://svn.openlayers.org/trunk/openlayers/repository-license.txt
+ * for the full text of the license. */
+
+
+/**
+ * @class
+ *
+ * @requires OpenLayers/Control.js
+ */
+OpenLayers.Control.ArgParser = OpenLayers.Class.create();
+OpenLayers.Control.ArgParser.prototype =
+ OpenLayers.Class.inherit( OpenLayers.Control, {
+
+ /** @type OpenLayers.LonLat */
+ center: null,
+
+ /** @type int */
+ zoom: null,
+
+ /** @type Array */
+ layers: null,
+
+ /**
+ * @constructor
+ *
+ * @param {DOMElement} element
+ * @param {String} base
+ */
+ initialize: function(element, base) {
+ OpenLayers.Control.prototype.initialize.apply(this, arguments);
+ },
+
+ /** Set the map property for the control.
+ *
+ * @param {OpenLayers.Map} map
+ */
+ setMap: function(map) {
+
+ OpenLayers.Control.prototype.setMap.apply(this, arguments);
+
+ //make sure we dont already have an arg parser attached
+ for(var i=0; i< this.map.controls.length; i++) {
+ var control = this.map.controls[i];
+ if ( (control != this) &&
+ (control.CLASS_NAME == "OpenLayers.Control.ArgParser") ) {
+ break;
+ }
+ }
+ if (i == this.map.controls.length) {
+
+ var args = OpenLayers.Util.getArgs();
+
+ if (args.lat && args.lon) {
+ this.center = new OpenLayers.LonLat(parseFloat(args.lon),
+ parseFloat(args.lat));
+
+ if (args.zoom) {
+ this.zoom = parseInt(args.zoom);
+ }
+
+ // when we add a new baselayer to see when we can set the center
+ this.map.events.register('changebaselayer', this,
+ this.setCenter);
+ this.setCenter();
+ }
+
+ if (args.layers) {
+
+ this.layers = args.layers;
+
+ // when we add a new layer, set its visibility
+ this.map.events.register('addlayer', this,
+ this.configureLayers);
+ this.configureLayers();
+ }
+ }
+ },
+
+ /** As soon as a baseLayer has been loaded, we center and zoom
+ * ...and remove the handler.
+ */
+ setCenter: function() {
+ this.map.maxExtent = new OpenLayers.Bounds(-180, -90, 180, 90);
+ if (this.map.baseLayer) {
+ //dont need to listen for this one anymore
+ this.map.events.unregister('changebaselayer', this,
+ this.setCenter);
+
+ this.map.setCenter(this.center, this.zoom);
+ }
+ },
+
+ /** As soon as all the layers are loaded, cycle through them and
+ * hide or show them.
+ */
+ configureLayers: function() {
+
+ var aLayers = this.layers.split('||');
+ if (aLayers.length) {
+ this.map.events.unregister('addlayer', this, this.configureLayers);
+
+ //WEIRD TRICK TO AVOID A JS ERROR !!!!!!!
+ this.map.popups = [];
+
+ for(var i=0; i < aLayers.length; i++) {
+ // alert('1');
+ var aLayer = aLayers[i].split('|');
+ if(aLayer.length>1){
+ var c = aLayer[0];
+ //alert(aLayer[1]);
+ //WMSinfo
+ var layerName = aLayer[1];
+ var url = aLayer[2];
+ var params = aLayer[3];
+ var wmsLayerString = aLayer[4];
+ //alert(wmsLayerString);
+ //WMS request vars
+ var format = '';//FORMAT
+ var exceptions = '';//EXCEPTIONS
+ var service = 'WMS';//SERVICE
+ var version = '';//VERSION
+ var request = "getMap";//REQUEST
+ var styles = '';//STYLES
+
+ //aWMSLayers params
+ var aParams = params.split('!!');
+ for(j=0;j<aParams.length;j++){
+ var param = aParams[j].split('!');
+ switch(param[0]){
+ case 'FORMAT':
+ format = param[1];
+ break;
+ case 'EXCEPTIONS':
+ exceptions = param[1];
+ break;
+ case 'VERSION':
+ version = param[1];
+ break;
+ case 'STYLES':
+ styles = param[1];
+ break;
+ };
+
+ }
+ //var Name= layerName;
+ //var Title = layerName;
+ //var Abstract = '';
+ //var BoundingBox = '';
+ //var LegendURL = '';
+ //var queryable = false;
+
+
+
+
+
+ var layerTitle = '';
+ //wmsLayerString
+
+
+ if (c == "B") {
+
+
+
+ var layer = new OpenLayers.Layer.WMS( layerName,
+ url, {layers: layerName, EXCEPTIONS: exceptions} );
+
+ layer.aWMSLayers = [];
+ aWMSlayer = unescape(wmsLayerString).split('$$$');
+ for(u=0;u<aWMSlayer.length;u++){
+ if(aWMSlayer[u].length)layer.aWMSLayers.push(aWMSlayer[u].split('@'));
+ //alert(wmsLayer);
+ }
+
+ //if(!layer.aWMSLayers) layer.aWMSLayers = [];
+ //layer.aWMSLayers.push(Name,Title,Abstract,BoundingBox,LegendURL);
+ layer.WMSinfo = [layerName,url,params,layer.aWMSLayers];
+ this.map.addLayer(layer);
+ //alert('22');
+ this.map.setBaseLayer(layer);
+ //alert('23');
+
+ } else if ( (c == "T") || (c == "F") ) {
+
+ var layer = new OpenLayers.Layer.WMS( layerName,
+ url, {layers: layerName,format: format,TRANSPARENT: "TRUE", EXCEPTIONS: exceptions} );
+
+ layer.aWMSLayers = [];
+ aWMSlayer = unescape(wmsLayerString).split('$$$');
+ for(u=0;u<aWMSlayer.length;u++){
+ if(aWMSlayer[u].length)layer.aWMSLayers.push(aWMSlayer[u].split('@'));
+ //alert(aWMSlayer[u].split('@'));
+ }
+
+
+ layer.WMSinfo = [layerName,url,params,aWMSlayer];
+ layer.isBaseLayer = false;
+ layer.setVisibility(c == "T");
+ this.map.addLayer(layer);
+
+
+ }
+
+ }
+ }
+
+ //var bounds = new OpenLayers.Bounds(-180,-87,90,180);
+
+ //this.map.zoomToExtent(bounds);
+
+ }
+ },
+
+ /** @final @type String */
+ CLASS_NAME: "OpenLayers.Control.ArgParser"
+});
Added: sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMSExporter.js
===================================================================
--- sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMSExporter.js (rev 0)
+++ sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMSExporter.js 2007-11-01 20:51:39 UTC (rev 5096)
@@ -0,0 +1,175 @@
+/* Copyright (c) 2006 MetaCarta, Inc., published under a modified BSD license.
+ * See http://svn.openlayers.org/trunk/openlayers/repository-license.txt
+ * for the full text of the license. */
+
+
+/**
+ * @class
+ *
+ * @requires OpenLayers/Control.js
+ */
+OpenLayers.Control.WMSExporter = OpenLayers.Class.create();
+OpenLayers.Control.WMSExporter.prototype =
+ OpenLayers.Class.inherit( OpenLayers.Control, {
+
+ /** @type DOMElement */
+ element: null,
+
+ /** @type String */
+ base: '',
+
+ /**
+ * @constructor
+ *
+ * @param {DOMElement} element
+ * @param {String} base
+ */
+ initialize: function(element, base) {
+ OpenLayers.Control.prototype.initialize.apply(this, arguments);
+ this.element = OpenLayers.Util.getElement(element);
+ if (base) {
+ this.base = base;
+ }
+ },
+
+ /**
+ *
+ */
+ destroy: function() {
+ if (this.element.parentNode == this.div) {
+ this.div.removeChild(this.element);
+ }
+ this.element = null;
+
+ this.map.events.unregister('moveend', this, this.updateLink);
+
+ OpenLayers.Control.prototype.destroy.apply(this, arguments);
+ },
+
+ /** Set the map property for the control.
+ *
+ * @param {OpenLayers.Map} map
+ */
+ setMap: function(map) {
+ OpenLayers.Control.prototype.setMap.apply(this, arguments);
+
+ //make sure we have an arg parser attached
+ for(var i=0; i< this.map.controls.length; i++) {
+ var control = this.map.controls[i];
+ if (control.CLASS_NAME == "OpenLayers.Control.ArgParser") {
+ break;
+ }
+ }
+ if (i == this.map.controls.length) {
+ this.map.addControl(new OpenLayers.Control.ArgParser());
+ }
+
+ },
+
+ /**
+ * @type DOMElement
+ */
+ draw: function() {
+ OpenLayers.Control.prototype.draw.apply(this, arguments);
+
+ if (!this.element) {
+ this.div.className = this.displayClass;
+ this.element = document.createElement("a");
+ this.element.style.fontSize="smaller";
+ this.element.innerHTML = "OL Exporter";
+ this.element.href="";
+ this.element.onclick = function() {
+ //alert(this.outstring);
+ var newwindow;
+ //Encode the xml inside the error message
+ encodedHtml = this.outstring;
+ encodedHtml = encodedHtml.replace(/</g,"<");
+ encodedHtml = encodedHtml.replace(/>/g,">");
+ //popup a message windows to let the use copy the error
+ newwindow=window.open('','','menubar=1,scrollbars=1,width=700,height=400,resizable=1') ;
+ //menubar=1,location=1,status=1,
+ newwindow.document.writeln('<html> <head> <title>Error Parsing GetCapabilties<\/title> <\/head> <body><pre><code>');
+ newwindow.document.writeln(encodedHtml);
+ newwindow.document.writeln('<\/code><\/pre> <\/body> <\/html>');
+ newwindow.document.close();
+ return false;
+ };
+ this.div.appendChild(this.element);
+ }
+ this.map.events.register('moveend', this, this.updateLink);
+ return this.div;
+ },
+
+ /**
+ *
+ */
+ updateLink: function() {
+ var center = this.map.getCenter();
+ var zoom = "zoom=" + this.map.getZoom();
+ var lat = "lat=" + Math.round(center.lat*100000)/100000;
+ var lon = "lon=" + Math.round(center.lon*100000)/100000;
+
+ var layers = "layers=";
+ /*for(var i=0; i< this.map.layers.length; i++) {
+ var layer = this.map.layers[i];
+
+ if (layer.isBaseLayer) {
+ layers += (layer == this.map.baseLayer) ? "B" : "0";
+ } else {
+ layers += (layer.getVisibility()) ? "T" : "F";
+ }
+ }*/
+
+ //OpenLayers last build: http://www.openlayers.org/api/OpenLayers.js
+ //WMSManager nightly build: http://www.ominiverdi.org/openlayers/nightly/openlayers/build/OpenLayers.js
+ var header = '<html xmlns="http:\/\/www.w3.org/1999/xhtml">\n';
+ header += '<head>\n<style type="text/css">\n';
+ header += '\t#map {\n\t\t width: 800px;\n\t\t height: 475px;\n\t\t border: 1px solid black;\n\t}\n</style>\n';
+ header += '<script src="http://www.openlayers.org/api/OpenLayers.js"></script>\n';
+ //header += //'<script src="http://www.ominiverdi.org/openlayers/nightly/openlayers/build/WMSManager.js"></script>\n';
+ header += '<script type="text/javascript">\n<!-- \n\t var map;';
+ header += '\n\t function init(){\n\t\t map = new OpenLayers.Map( $(\'map\') ); ';
+ var layers = '\n';
+
+ for(var i=0; i< this.map.layers.length; i++) {
+ var layer = this.map.layers[i];
+ layers += '\n\t\t layer' + i + ' = new OpenLayers.Layer.WMS( "' +
+ layer.WMSinfo[0] + '", "';
+ layers += layer.WMSinfo[1];
+ layers += '",{';
+ var aParams = layer.WMSinfo[2].split('!!');
+ for(y=0;y<aParams.length;y++){
+ var keyVal = aParams[y].split('!');
+ if(keyVal[0]){
+ if(keyVal[0]=='TRANSPARENT') {
+ if(keyVal[1]=='TRUE')layers += 'TRANSPARENT : true';
+ else layers += 'TRANSPARENT : false';
+ }
+ else layers += keyVal[0] + ': \'' + keyVal[1] + '\'';
+ if(y<aParams.length-1) layers += ',';
+ }
+ }
+ layers +='} );';
+
+ layers += '\n\t\t map.addLayer(layer' + i + ');';
+ if (layer.isBaseLayer) {
+ layers += '\n\t\t map.setBaseLayer(layer' + i + ');';
+ } else {
+ layers += '\n\t\t layer' + i + '.setVisibility('+layer.getVisibility() +' );';
+ }
+
+ }
+
+ var footer = '';
+ footer += '\n\t\t map.setCenter(new OpenLayers.LonLat('+ lon + ','+ lat +'),' +zoom+');';
+ footer += '\n\t\t map.addControl( new OpenLayers.Control.LayerSwitcher() );';
+ footer += '\n\t\} \n // --> \n</script> \n</head>';
+ footer += '\n<body onload="init()"> \n\t <div id="map"></div>';
+ footer += '\n</body>\n</html>';
+ this.element.outstring = header + layers + footer;
+
+ },
+
+ /** @final @type String */
+ CLASS_NAME: "OpenLayers.Control.WMSExporter"
+});
Added: sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMSManager.js
===================================================================
--- sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMSManager.js (rev 0)
+++ sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMSManager.js 2007-11-01 20:51:39 UTC (rev 5096)
@@ -0,0 +1,2460 @@
+/* Copyright (c) 2006-2007 MetaCarta, Inc., published under the BSD license.
+ * See http://svn.openlayers.org/trunk/openlayers/release-license.txt
+ * for the full text of the license. */
+
+/**
+ * @class
+ *
+ * @author Lorenzo Becchi (ominiverdi.org)
+ * @projectDescription ticket #687
+ *
+ * @requires OpenLayers/Control.js
+ */
+OpenLayers.Control.WMSManager = OpenLayers.Class.create();
+OpenLayers.Control.WMSManager.prototype =
+ OpenLayers.Class.inherit( OpenLayers.Control, {
+
+ /** @type String */
+ activeColor: "darkblue",
+
+
+ // DOM Elements
+
+ /** @type DOMElement */
+ olLayerManager: null,
+
+
+ /** @type DOMElement */
+ olServerList: null,
+
+ /** @type DOMElement */
+ olLegend: null,
+
+ /** @type DOMElement */
+ olLayerManagerHeader: null,
+
+ /** @type DOMElement */
+ WMSManagerForm: null,
+
+
+ /** @type DOMElement */
+ layersDiv: null,
+
+ /** @type DOMElement */
+ layerStuff: null,
+
+ /** @type DOMElement */
+ baseLayersDiv: null,
+
+ /** @type DOMElement */
+ selectImageType: null,
+
+ /** @type DOMElement */
+ overlayButton:null,
+
+ /** @type Array */
+ baseLayerInputs: null,
+
+
+ /** @type DOMElement */
+ dataLbl: null,
+
+ /** @type DOMElement */
+ dataLayersDiv: null,
+
+ /** @type Array */
+ dataLayerInputs: null,
+
+
+ /** @type DOMElement */
+ minimizeDiv: null,
+
+ /** @type DOMElement */
+ maximizeDiv: null,
+
+ //Arrays
+ /** @type Array */
+ aWMSServer: null,
+
+ //WMS layers features
+ /** @type Array
+ * @param Name:Title:Abstract:BoundingBox:LegendURL:queryable
+ */
+ aWMSLayers: [],
+
+ //Image formats for WMS server
+ /** @type Array
+ */
+ aImageFormats: [],
+
+ //others
+
+ /** @type Boolean */
+ ascending: true,
+
+ /** @type string */
+ activePanel: 'olLegend',
+
+ //WMS default params
+ /** @type string */
+ exceptionsValue: 'application/vnd.ogc.se_inimage',//OL default value
+ resolutionsValue: null,//OL default value
+
+
+ /**
+ * @constructor
+ */
+ initialize: function(aWMSServer,targetObj,options) {
+ OpenLayers.Control.prototype.initialize.apply(this, arguments);
+ this.aWMSServer= aWMSServer;
+ this.targetObj = targetObj;
+
+ },
+
+ /**
+ *
+ */
+ destroy: function() {
+
+ OpenLayers.Event.stopObservingElement(this.div);
+
+ OpenLayers.Event.stopObservingElement(this.minimizeDiv);
+ OpenLayers.Event.stopObservingElement(this.maximizeDiv);
+
+ //clear out layers info and unregister their events
+ this.clearLayersArray("base");
+ this.clearLayersArray("data");
+
+ this.map.events.unregister("addlayer", this, this.redraw);
+ this.map.events.unregister("changelayer", this, this.redraw);
+ this.map.events.unregister("removelayer", this, this.redraw);
+ this.map.events.unregister("changebaselayer", this, this.redraw);
+
+ OpenLayers.Control.prototype.destroy.apply(this, arguments);
+ },
+
+ /**
+ * @param {OpenLayers.Map} map
+ */
+ setMap: function(map) {
+ OpenLayers.Control.prototype.setMap.apply(this, arguments);
+
+ this.map.events.register("addlayer", this, this.redraw);
+ this.map.events.register("changelayer", this, this.redraw);
+ this.map.events.register("removelayer", this, this.redraw);
+ this.map.events.register("changebaselayer", this, this.redraw);
+
+
+ },
+
+ /**
+ * @returns A reference to the DIV DOMElement containing the switcher tabs
+ * @type DOMElement
+ */
+ draw: function() {
+ OpenLayers.Control.prototype.draw.apply(this);
+
+
+
+ // create layout divs
+ this.loadContents();
+
+ // set mode to minimize
+ //this.minimizeControl();
+ //this.showControls();
+
+ // populate div with current info
+ this.redraw();
+
+ this.switchPanel();
+ this.maximizeControl();
+ return this.div;
+ },
+
+ /** user specifies either "base" or "data". we then clear all the
+ * corresponding listeners, the div, and reinitialize a new array.
+ *
+ * @private
+ *
+ * @param {String} layersType Ei
+ */
+ clearLayersArray: function(layersType) {
+ var layers = this[layersType + "Layers"];
+ if (layers) {
+ for(var i=0; i < layers.length; i++) {
+ var layer = layers[i];
+ OpenLayers.Event.stopObservingElement(layer.inputElem);
+ OpenLayers.Event.stopObservingElement(layer.labelSpan);
+ }
+ }
+ this[layersType + "LayersDiv"].innerHTML = "";
+ this[layersType + "Layers"] = [];
+ },
+
+
+ /** Goes through and takes the current state of the Map and rebuilds the
+ * control to display that state. Groups base layers into a radio-button
+ * group and lists each data layer with a checkbox.
+ *
+ * @returns A reference to the DIV DOMElement containing the control
+ * @type DOMElement
+ */
+ redraw: function() {
+
+ //clear out previous layers
+ this.baseLayersDiv.innerHTML = "";
+ this.baseLayerInputs = [];
+
+ this.dataLayersDiv.innerHTML = "";
+ this.dataLayerInputs = [];
+
+ var containsOverlays = false;
+
+ var layers = this.map.layers.slice();
+ if(layers.length == 0)
+ this.baseLayersDiv.innerHTML = "<p><span style='color:yellow'>no layers added</span><br> Please add some using 'WMS Servers' selector or using 'Catalogue' search.</p>";
+
+ if (!this.ascending) { layers.reverse(); }
+ for( var i = 0; i < layers.length; i++) {
+ var layer = layers[i];
+ var baseLayer = layer.isBaseLayer;
+
+ if (baseLayer || layer.displayInLayerSwitcher) {
+
+ //GET LAYER INFOS from WMS array
+ // set gently layer Name
+ var layerName= layer.name;
+
+ if (!baseLayer) {
+ containsOverlays = true;
+ }
+
+ // only check a baselayer if it is *the* baselayer, check data
+ // layers if they are visible
+ var checked = (baseLayer) ? (layer == this.map.baseLayer)
+ : layer.getVisibility();
+
+ // create input element
+ var inputElem = document.createElement("input");
+ inputElem.id = "input_" + layer.name;
+ inputElem.name = (baseLayer) ? "baseLayers" : layer.name;
+ inputElem.type = (baseLayer) ? "radio" : "checkbox";
+ inputElem.value = layer.name;
+ inputElem.checked = checked;
+ inputElem.defaultChecked = checked;
+ inputElem.layer = layer;
+ inputElem.control = this;
+
+
+ if (!baseLayer && !layer.inRange) {
+ inputElem.disabled = true;
+ }
+
+
+ OpenLayers.Event.observe(inputElem, "mouseup", this.onInputClick.bindAsEventListener(inputElem));
+
+ // create span
+ /*var labelSpan = document.createElement("span");
+ if (!baseLayer && !layer.inRange) {
+ labelSpan.style.color = "gray";
+ }*/
+
+ var layerUl = document.createElement("ul");
+
+ var layerTitle = '';
+ var aExtents = [];
+ 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]) {
+ //list of layer titles
+ /*
+ layerTitle +=(layerTitle.length>0)?
+ ', ' + '[' + listedLayer[0] + '] ' + listedLayer[1]
+ : '[' + listedLayer[0] + '] ' + listedLayer[1];
+
+ //show if queryable
+ if(listedLayer[5]==1) layerTitle +=' (q)';
+ */
+
+ var li = document.createElement('li');
+ li.innerHTML = '[' + listedLayer[0] + '] ' + listedLayer[1];
+ if(listedLayer[5]==1) li.innerHTML +=' (q)';
+ layerUl.appendChild(li);
+
+
+
+ //find layers extents
+ if(listedLayer[3].length==4){
+ aExtents.push(listedLayer[3]);//bounding boxes
+ } else if(listedLayer[3].split){
+ var bbox = listedLayer[3].split(',');
+ aExtents.push(bbox);//bounding boxes
+ } else alert('wrong bbox: '+listedLayer[3])
+ }
+ }
+ }
+
+ //labelSpan.innerHTML = layerTitle;
+ layerUl.style.verticalAlign = (baseLayer) ? "bottom"
+ : "baseline";
+ OpenLayers.Event.observe(layerUl, "click", this.onInputClick.bindAsEventListener(inputElem));
+
+
+
+ // create line break
+ var br = document.createElement("br");
+
+ //create legend Tool and image
+ var legendTools = document.createElement("div");
+ legendTools.style.paddingLeft ='10px';
+ legendTools.style.display ='none';
+
+ //create opacity value
+ var opacity = (layer.opacity)?layer.opacity:1;
+ var opSpan = document.createElement("span");
+ opSpan.innerHTML = opacity;
+
+ // create opacity Anchors
+ var aUp = document.createElement("a");
+ aUp.href="#";
+ aUp.layer=layer;
+ aUp.opSpan = opSpan;
+ aUp.className="olLegendLayerOpacity";
+ aUp.onclick = function(){
+ var maxOpacity = 1;
+ var minOpacity = 0.1;
+ var opacity=(this.layer.opacity)?this.layer.opacity:1;
+ var newOpacity = (parseFloat(opacity) + 0.1).toFixed(1);
+ newOpacity = Math.min(maxOpacity, Math.max(minOpacity, newOpacity));
+ this.layer.setOpacity(newOpacity);
+ this.opSpan.innerHTML = newOpacity;
+ };
+ aUp.innerHTML = '<span>></span>';
+
+ var aDown = document.createElement("a");
+ aDown.href="#";
+ aDown.layer=layer;
+ aDown.opSpan = opSpan;
+ aDown.className="olLegendLayerOpacity";
+ aDown.onclick = function(){
+ var maxOpacity = 1;
+ var minOpacity = 0.1;
+ var opacity=(this.layer.opacity)?this.layer.opacity:1;
+ var newOpacity = (parseFloat(opacity) - 0.1).toFixed(1);
+ newOpacity = Math.min(maxOpacity, Math.max(minOpacity, newOpacity));
+ this.layer.setOpacity(newOpacity);
+ this.opSpan.innerHTML = newOpacity;
+ };
+ aDown.innerHTML = '<span><</span>';
+
+
+ //Create DropLayer
+ var aDrop = document.createElement("a");
+ aDrop.innerHTML = '<span>X</span>';
+ aDrop.className = 'olLegendLayerDrop';
+ aDrop.layer = layer;
+ aDrop.onclick = function(){
+ this.layer.map.removeLayer(this.layer);
+ };
+
+ //Create SwitchLayer
+ var aSwitchUp = document.createElement("a");
+ aSwitchUp.innerHTML = '<span>↑</span>';
+ aSwitchUp.className = 'olLegendLayerSwitch';
+ aSwitchUp.layer = layer;
+ aSwitchUp.onclick = function(){
+ var startZ = this.layer.map.getLayerIndex(this.layer);
+ if(startZ==0)return alert("this is already the top");
+ this.layer.map.raiseLayer(this.layer,-1);
+ };
+ var aSwitchDown = document.createElement("a");
+ aSwitchDown.innerHTML = '<span>↓</span>';// + ' ' + layer.map.getLayerIndex(layer)
+ aSwitchDown.className = 'olLegendLayerSwitch';
+ aSwitchDown.layer = layer;
+ aSwitchDown.onclick = function(){
+ var startZ = this.layer.map.getLayerIndex(this.layer);
+ var numL = this.layer.map.getNumLayers();
+ //alert(startZ + ':' + numL);
+ if(startZ==numL-1)return alert("this is already the bottom");
+ this.layer.map.raiseLayer(this.layer,1);
+ //NEED A PATCH IN this.layer.map.raiseLayer TO AVOID COUNTING BASE LAYERS
+ };
+
+ //expand legend icon
+ var aExpandIcon = document.createElement("a");
+ aExpandIcon.innerHTML = '<span> + </span>';
+ aExpandIcon.className = 'olLegendIconExpander';
+ aExpandIcon.layer = layer;
+ aExpandIcon.expanded = true;
+ aExpandIcon.legendTools = legendTools;
+ aExpandIcon.onclick = function(){
+ if(this.expanded){
+ this.innerHTML = '<span> - </span>';
+ this.legendTools.style.display = "block";
+ this.expanded = false;
+ }else {
+ this.innerHTML = '<span> + </span>';
+ this.legendTools.style.display = "none";
+ this.expanded = true;
+ }
+ };
+
+ //zoom to layer extent icon
+ var bounds = null;
+ for(u=0;u<aExtents.length;u++){
+ var ext = aExtents[u];
+ if(!bounds) {
+ bounds = new OpenLayers.Bounds(ext[0], ext[1], ext[2], ext[3]);
+ }
+ else {
+ var nBounds = new OpenLayers.Bounds(ext[0], ext[1], ext[2], ext[3]);
+ bounds.extend(nBounds);
+
+ }
+ }
+ var aZoomToIcon = document.createElement("a");
+ aZoomToIcon.innerHTML = '<span> zoom </span>';
+ aZoomToIcon.title = 'zoom to extent';
+ aZoomToIcon.className = 'olLegendIconZoomer';
+ aZoomToIcon.layer = layer;
+ aZoomToIcon.bounds = bounds;
+ aZoomToIcon.onclick = function(){
+ //alert(this.bounds);
+
+ this.layer.map.zoomToExtent(this.bounds);
+ };
+
+
+ if(!baseLayer){
+ var layerTools = document.createElement("div");
+ layerTools.className = 'olLegendLayerTools';
+ layerTools.appendChild(aDown);
+ layerTools.appendChild(opSpan);
+ layerTools.appendChild(aUp);
+ layerTools.appendChild(aSwitchDown);
+ layerTools.appendChild(aSwitchUp);
+ legendTools.appendChild(layerTools);
+ }
+
+
+ var legendImages = document.createElement("div");
+ legendImages.className = 'olLegendLegendImages';
+ 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]) {
+
+ //set legend url
+ legendName = listedLayer[0];
+ legendTitle = listedLayer[1];
+ legendAbstract = listedLayer[2];
+ legendQueriable = listedLayer[5];
+ legendUrl = listedLayer[4];
+
+
+ var legendSpan = document.createElement("span");
+ var mess = '<table><tr><th>Name</th><td> '+ legendName + '</td></tr>' +
+ '<tr><th>Title</th><td>'+legendTitle +'</td></tr>' +
+ '<tr><th>Abstract</th><td>'+ legendAbstract +'</td></tr>' +
+ '<tr><th>Queryable</th><td>'+legendQueriable + '</td></tr>';
+
+
+ if(legendUrl){
+ mess += '<tr><th>Image</th><td><img src="'+legendUrl + '"></td></tr>';
+ //'<h5>Legend Image:</h5><img src="'+legendUrl+'">';
+ //var legendImg = document.createElement("img");
+ //legendImg.src =legendUrl;
+ //legendSpan.appendChild(legendImg);
+ }else {
+ mess += '<tr><th>Image</th><td>none</td></tr>';
+ }
+
+
+
+ legendSpan.innerHTML = mess + '</tr></table>';
+
+ //TODO check id SLDManager is in Control LIST
+ var controls = this.map.controls;
+ var SLDManager;
+ for(z=0;z<controls.length;z++){
+ var control = controls[z];
+ if(control.CLASS_NAME == 'OpenLayers.Control.SLDManager'){
+ SLDManager = control;
+ }
+ }
+ if(SLDManager){
+ var sldman = document.createElement('div');
+ sldman.className = 'sldman';
+ var sldButton = document.createElement('button');
+ sldButton.innerHTML = 'change SLD';
+ sldButton.map = this.map;
+ sldButton.layer = selectedLayer;
+ sldButton.SLDManager = SLDManager;
+ sldButton.target = sldman;
+ sldButton.onclick = function(){
+ this.SLDManager.updateTarget(this.target);
+ this.SLDManager.redraw(this);
+
+ };
+ //sldButton.onclick = function(){this.SLDManager.redraw(this)};
+ //new OpenLayers.Control.SLDManager($('queryOut'))
+ legendSpan.appendChild(sldman);
+ legendSpan.appendChild(sldButton);
+ }
+
+
+ legendImages.appendChild(legendSpan);
+ legendImages.style.display = 'block';
+
+
+
+
+ }
+ }
+
+ }
+
+ legendTools.appendChild(legendImages);
+
+
+
+
+
+
+
+ var groupArray = (baseLayer) ? this.baseLayerInputs
+ : this.dataLayerInputs;
+ groupArray.push(inputElem);
+
+
+ var groupDiv = (baseLayer) ? this.baseLayersDiv
+ : this.dataLayersDiv;
+
+ //create Layer div
+ var layerDiv = document.createElement("div");
+ layerDiv.className = 'olLegendLayerDiv';
+ layerDiv.appendChild(inputElem);
+ layerDiv.appendChild(aDrop);
+ layerDiv.appendChild(aExpandIcon);
+ layerDiv.appendChild(aZoomToIcon);
+ //layerDiv.appendChild(labelSpan);
+ layerDiv.appendChild(layerUl);
+ //layerDiv.appendChild(br);
+
+
+
+ layerDiv.appendChild(legendTools);
+
+
+ //append to group div
+ groupDiv.appendChild(layerDiv);
+
+ }
+ }
+
+ // if no overlays, dont display the overlay label
+ this.dataLbl.style.display = (containsOverlays) ? "" : "none";
+
+ return this.div;
+ },
+
+ /** the overlay checbox has been clicked, check or uncheck its corresponding input
+ *
+ * @private
+ *
+ * @param {Event} e
+ */
+
+ onOverlayClick: function(e) {
+ if (!this.disabled) {
+ if (this.type == "radio") {
+ this.checked = true;
+ //this.layer.map.setBaseLayer(this.layer, true);
+ //this.layer.map.events.triggerEvent("changebaselayer");
+ } else {
+ this.checked = !this.checked;
+ }
+ }
+ OpenLayers.Event.stop(e);
+ },
+
+ /** the overlay checbox has been clicked, check or uncheck its corresponding input
+ *
+ * @private
+ *
+ * @param {Event} e
+ */
+
+ onServerSelectFocus: function(e) {
+
+ //TODO DELETE THIS IF NOT NEEDED
+ //alert('focus');
+ /* if (!this.disabled) {
+ if (this.type == "radio") {
+ this.checked = true;
+ //this.layer.map.setBaseLayer(this.layer, true);
+ //this.layer.map.events.triggerEvent("changebaselayer");
+ } else {
+ this.checked = !this.checked;
+ }
+ }*/
+ OpenLayers.Event.stop(e);
+ },
+
+ /** A label has been clicked, check or uncheck its corresponding input
+ *
+ * @private
+ *
+ * @param {Event} e
+ */
+
+ onInputClick: function(e) {
+ if (!this.disabled) {
+ if (this.type == "radio") {
+ this.checked = true;
+ this.layer.map.setBaseLayer(this.layer, true);
+ this.layer.map.events.triggerEvent("changebaselayer");
+ } else {
+ this.checked = !this.checked;
+ this.control.updateMap();
+ }
+ }
+ OpenLayers.Event.stop(e);
+ },
+
+ /** Need to update the map accordingly whenever user clicks in either of
+ * the layers.
+ *
+ * @private
+ *
+ * @param {Event} e
+ */
+ onLayerClick: function(e) {
+ this.updateMap();
+ },
+
+
+ /** Cycles through the loaded data and base layer input arrays and makes
+ * the necessary calls to the Map object such that that the map's
+ * visual state corresponds to what the user has selected in the control
+ *
+ * @private
+ */
+ updateMap: function() {
+
+ // set the newly selected base layer
+ for(var i=0; i < this.baseLayerInputs.length; i++) {
+ var input = this.baseLayerInputs[i];
+ if (input.checked) {
+ this.map.setBaseLayer(input.layer, false);
+ }
+ }
+
+ // set the correct visibilities for the overlays
+ for(var i=0; i < this.dataLayerInputs.length; i++) {
+ var input = this.dataLayerInputs[i];
+ input.layer.setVisibility(input.checked, true);
+ }
+
+ },
+
+ /** Set up the labels and divs for the control
+ *
+ * @param {Event} e
+ */
+ maximizeControl: function(e) {
+
+ //HACK HACK HACK - find a way to auto-size this layerswitcher
+ this.div.style.width = "20em";
+ this.div.style.height = "";
+
+ this.showControls(false);
+
+ if (e != null) {
+ OpenLayers.Event.stop(e);
+ }
+ },
+
+ /** Hide all the contents of the control, shrink the size,
+ * add the maximize icon
+ *
+ * @param {Event} e
+ */
+ minimizeControl: function(e) {
+
+ this.div.style.width = "0px";
+ this.div.style.height = "0px";
+
+ this.showControls(true);
+
+ if (e != null) {
+ OpenLayers.Event.stop(e);
+ }
+ },
+
+ /** Hide/Show all LayerSwitcher controls depending on whether we are
+ * minimized or not
+ *
+ * @private
+ *
+ * @param {Boolean} minimize
+ */
+ showControls: function(minimize) {
+
+ this.maximizeDiv.style.display = minimize ? "" : "none";
+ this.minimizeDiv.style.display = minimize ? "none" : "";
+
+ this.layersDiv.style.display = minimize ? "none" : "";
+ },
+
+ /** Set up the labels and divs for the control
+ *
+ */
+ loadContents: function() {
+
+ //configure main div
+ this.div.style.position = "absolute";
+ this.div.style.top = "25px";
+ this.div.style.right = "0px";
+ this.div.style.left = "";
+ this.div.style.fontFamily = "sans-serif";
+ this.div.style.fontWeight = "bold";
+ this.div.style.marginTop = "3px";
+ this.div.style.marginLeft = "3px";
+ this.div.style.marginBottom = "3px";
+ this.div.style.fontSize = "smaller";
+ this.div.style.color = "white";
+ this.div.style.backgroundColor = "transparent";
+
+ OpenLayers.Event.observe(this.div, "mouseup",
+ this.mouseUp.bindAsEventListener(this));
+ OpenLayers.Event.observe(this.div, "click",
+ this.ignoreEvent);
+ OpenLayers.Event.observe(this.div, "mousedown",
+ this.mouseDown.bindAsEventListener(this));
+ OpenLayers.Event.observe(this.div, "dblclick", this.ignoreEvent);
+
+ //create olLayerManagerHeader div
+ this.olLayerManagerHeader = document.createElement("div");
+ this.olLayerManagerHeader.className = "olLayerManagerHeader";
+ // add Legend button
+ this.buttonLayers = document.createElement("a");
+ this.buttonLayers.href="#";
+ this.buttonLayers.LayerManager =this;
+ this.buttonLayers.panel ='olLegend';
+ this.buttonLayers.onclick =this.switchPanel;
+ var spanL = document.createElement("span");
+ spanL.innerHTML = "Legend";
+ this.buttonLayers.appendChild(spanL);
+
+ // add WMS Servers button
+ this.buttonServers = document.createElement("a");
+ this.buttonServers.href="#";
+ this.buttonServers.LayerManager =this;
+ this.buttonServers.panel = 'olServerList';
+ this.buttonServers.onclick =this.switchPanel;
+ var spanS = document.createElement("span");
+ spanS.innerHTML = "WMS Servers";
+ this.buttonServers.appendChild(spanS);
+
+ // add Catalogue Server button
+ this.catalogueServers = document.createElement("a");
+ this.catalogueServers.href="#";
+ this.catalogueServers.LayerManager =this;
+ this.catalogueServers.panel = 'olCatalogue';
+ this.catalogueServers.onclick =this.switchPanel;
+ var spanS = document.createElement("span");
+ spanS.innerHTML = "Catalogue";
+ this.catalogueServers.appendChild(spanS);
+
+ this.olLayerManagerHeader.appendChild(this.buttonLayers);
+ this.olLayerManagerHeader.appendChild(this.buttonServers);
+ this.olLayerManagerHeader.appendChild(this.catalogueServers);
+
+
+ /*
+ * Catalogue panel
+ */
+
+ this.olCatalogue = document.createElement("div");
+ this.olCatalogue.className = "olCatalogue";
+
+ this.catalogueLog = document.createElement('p');
+ this.catalogueLog.className = 'CatalogueOutput';
+ this.catalogueLog.innerHTML = 'Write a search string and press "search" button. Then wait for layer list to appear.';
+ this.olCatalogue.appendChild(this.catalogueLog);
+
+ //Catalogue FORM
+ var form = document.createElement('form');
+ form.name='CatalogueConnector';
+ form.onsubmit = function() { return null; };
+ form.action='#';
+
+ this.catalogueInput = document.createElement('input');
+ this.catalogueInput.className = 'CatalogueInput';
+ this.catalogueInput.type = 'text';
+ OpenLayers.Event.observe(this.catalogueInput, "click",
+ function(evt) { evt.target.focus();});
+ form.appendChild(this.catalogueInput);
+
+ this.catSubmit = document.createElement('input');
+ this.catSubmit.type = 'button';
+ this.catSubmit.value = 'search';
+ this.catSubmit.WMSManager = this;
+ OpenLayers.Event.observe(this.catSubmit, "click",
+ function(evt) {
+ var str = this.WMSManager.catalogueInput.value;
+ if(!str) {
+ return alert('you can\'t search an empty string');
+ }
+ console.log(str);
+ this.WMSManager.searchCatalogue(this);
+ });
+
+ form.appendChild(this.catSubmit);
+
+ this.olCatalogue.appendChild(form);
+
+
+
+
+ /*
+ * WMS server form - panel
+ */
+
+ //div to pack all layers stuff
+
+ this.layerStuff = document.createElement('div');
+ this.layerStuff.className = 'wmsLayerLayerStuff';
+
+
+ //server select
+ this.olServerList = document.createElement("div");
+ this.olServerList.className = "olServerList";
+ var p = document.createElement('p');
+ //p.innerHTML = 'Use the select box here below to choose a server. Wait for remote response.';
+ this.olServerList.appendChild(p);
+ var p = document.createElement('p');
+ p.id = 'wmsManagerOutput';
+ this.olServerList.appendChild(p);
+
+ var form = document.createElement('form');
+ form.name='WMSServerConnector';
+ form.onsubmit = function() {return null;};
+ form.action='#';
+ this.olServerList.appendChild(form);
+
+ //Make server select
+ this.serverSelect = document.createElement('select');
+ this.serverSelect.className = 'wmsServerList';
+ this.serverSelect.id = 'wmsServerList';
+ this.serverSelect.WMSManager = this;
+ //this.serverSelect.style.width = "220px";
+ this.serverSelect.onchange = this.connect2server;
+ OpenLayers.Event.observe(this.serverSelect, "mouseup", this.onServerSelectFocus.bindAsEventListener(this.serverSelect));
+ OpenLayers.Event.observe(this.serverSelect, "blur", this.onServerSelectFocus.bindAsEventListener(this.serverSelect));
+ OpenLayers.Event.observe(this.serverSelect, "focus", this.onServerSelectFocus.bindAsEventListener(this.serverSelect));
+ var j = 0;
+ var opt = new Option( 'select a server', '', true, true );
+ this.serverSelect[j++] = opt;
+
+ form.appendChild(this.serverSelect);
+ for(i=0;i<this.aWMSServer.length;i++) {
+ this.serverSelect[j++] = new Option(this.aWMSServer[i][0],this.aWMSServer[i][1],false,false);
+ }
+
+ form.appendChild(this.layerStuff);
+
+ /*
+ * OL Layers Manager - panel
+ */
+
+ // layers list div
+ this.layersDiv = document.createElement("div");
+ this.layersDiv.id = "layersDiv";
+ this.layersDiv.style.paddingTop = "5px";
+ this.layersDiv.style.paddingLeft = "10px";
+ this.layersDiv.style.paddingBottom = "5px";
+ //this.layersDiv.style.paddingRight = "75px";
+ this.layersDiv.style.backgroundColor = this.activeColor;
+
+ // had to set width/height to get transparency in IE to work.
+ // thanks -- http://jszen.blogspot.com/2005/04/ie6-opacity-filter-caveat.html
+ //
+ this.layersDiv.style.width = "100%";
+ this.layersDiv.style.height = "100%";
+
+
+
+ var baseLbl = document.createElement("div");
+ baseLbl.innerHTML = "<u>Base Layer</u>";
+ baseLbl.style.marginTop = "3px";
+ baseLbl.style.marginLeft = "3px";
+ baseLbl.style.marginBottom = "3px";
+
+ this.baseLayersDiv = document.createElement("div");
+ this.baseLayersDiv.style.paddingLeft = "10px";
+ /*OpenLayers.Event.observe(this.baseLayersDiv, "click",
+ this.onLayerClick.bindAsEventListener(this));
+ */
+
+
+ this.dataLbl = document.createElement("div");
+ this.dataLbl.innerHTML = "<u>Overlays</u>";
+ this.dataLbl.style.marginTop = "3px";
+ this.dataLbl.style.marginLeft = "3px";
+ this.dataLbl.style.marginBottom = "3px";
+
+ this.dataLayersDiv = document.createElement("div");
+ this.dataLayersDiv.style.paddingLeft = "10px";
+ this.olLegend = document.createElement("div");
+ this.olLegend.className = "olLegend";
+
+ this.layersDiv.appendChild(this.olLayerManagerHeader);
+ if (this.ascending) {
+ this.olLegend.appendChild(baseLbl);
+ this.olLegend.appendChild(this.baseLayersDiv);
+ this.olLegend.appendChild(this.dataLbl);
+ this.olLegend.appendChild(this.dataLayersDiv);
+
+ } else {
+ this.olLegend.appendChild(this.dataLbl);
+ this.olLegend.appendChild(this.dataLayersDiv);
+ this.olLegend.appendChild(baseLbl);
+ this.olLegend.appendChild(this.baseLayersDiv);
+ }
+
+ this.layersDiv.appendChild(this.olLegend);
+ this.layersDiv.appendChild(this.olServerList);
+ this.layersDiv.appendChild(this.olCatalogue);
+
+ this.div.appendChild(this.layersDiv);
+
+ OpenLayers.Rico.Corner.round(this.div, {corners: "tl bl",
+ bgColor: "transparent",
+ color: this.activeColor,
+ blend: false});
+
+ OpenLayers.Rico.Corner.changeOpacity(this.layersDiv, 0.75);
+
+ var imgLocation = OpenLayers.Util.getImagesLocation();
+ var sz = new OpenLayers.Size(18,18);
+
+ // maximize button div
+ var img = imgLocation + 'layer-switcher-maximize.png';
+ this.maximizeDiv = OpenLayers.Util.createAlphaImageDiv(
+ "OpenLayers_Control_MaximizeDiv",
+ null,
+ sz,
+ img,
+ "absolute");
+ this.maximizeDiv.style.top = "5px";
+ this.maximizeDiv.style.right = "0px";
+ this.maximizeDiv.style.left = "";
+ this.maximizeDiv.style.display = "none";
+ OpenLayers.Event.observe(this.maximizeDiv,
+ "click",
+ this.maximizeControl.bindAsEventListener(this));
+
+ this.div.appendChild(this.maximizeDiv);
+
+ // minimize button div
+ var img = imgLocation + 'layer-switcher-minimize.png';
+ var sz = new OpenLayers.Size(18,18);
+ this.minimizeDiv = OpenLayers.Util.createAlphaImageDiv(
+ "OpenLayers_Control_MinimizeDiv",
+ null,
+ sz,
+ img,
+ "absolute");
+ this.minimizeDiv.style.top = "5px";
+ this.minimizeDiv.style.right = "0px";
+ this.minimizeDiv.style.left = "";
+ this.minimizeDiv.style.display = "none";
+ OpenLayers.Event.observe(this.minimizeDiv,
+ "click",
+ this.minimizeControl.bindAsEventListener(this));
+
+ this.div.appendChild(this.minimizeDiv);
+ },
+
+
+ /**
+ * @private
+ *
+ * @param {Event} evt
+ */
+ connect2server: function(evt) {
+ this.WMSManager.layerStuff.innerHTML ='';
+
+ var select = this;
+ if((select)) var url = select[select.selectedIndex].value;
+ else url ="";
+
+ if(url.length>0) {
+ this.baseURL = url;
+ } else {
+ alert('no server selected. please select one.');
+ return;
+ }
+ if (this.baseURL.indexOf('?') == -1)
+ {
+ this.baseURL = this.baseURL + '?';
+ }
+ else
+ {
+ if (this.baseURL.charAt( this.baseURL.length - 1 ) == '&')
+ this.baseURL = this.baseURL.slice( 0, -1 );
+ }
+
+ this.baseURL = this.baseURL+ "&service=WMS";
+ this.baseURL = this.baseURL + "&version=1.1.1";
+ this.baseURL = this.baseURL + "&request=GetCapabilities";
+
+
+ $('wmsManagerOutput').innerHTML = "Loading Layers list... please wait...";
+ //$('wmsManagerOutput').innerHTML = this.baseURL;
+ //alert(this.baseURL);
+ OpenLayers.loadURL(this.baseURL, null, this, this.WMSManager.parseGetCapabilities);
+ },
+
+
+
+ /**
+ * @private
+ *
+ * @param {XMLHttpRequest} ajaxRequest
+ */
+ parseGetCapabilities: function(ajaxRequest) {
+ var text = ajaxRequest.responseText;
+
+ //var oDomDoc = Sarissa.getDomDocument();
+
+ //myregexp = new RegExp('<!--[^(-->)]*-->');
+ text = text.replace(/<!--.*?-->/g, ''); //Helped with ESA server
+ text = text.replace(/\[.<!.*?>.\]/g, ''); //Helped with ESA server
+ text = text.replace(/<GetTileService>.*?GetTileService>/g, '');//skip NASA DTD error
+
+ var xml = OpenLayers.parseXMLString(text);
+
+ if(xml == null) return alert('incorrect content: check your WMS url');
+ if(xml.childNodes.length==0) {
+ try{
+ if(OpenLayers.Ajax.getParseErrorText(xml) == OpenLayers.Ajax.PARSED_OK){
+ // The document was parsed/loaded just fine, go on
+ //alert(xml);
+ alert('no Layers available on this server');
+ }
+ else{
+ // The document was not loaded correctly! Inform the user:
+ var error = OpenLayers.Ajax.getParseErrorText(xml);
+ //alert(error);
+ var newwindow;
+ //Encode the xml inside the error message
+ //encodedHtml = error;
+ //encodedHtml = encodedHtml.replace(/</g,"<");
+ //encodedHtml = encodedHtml.replace(/>/g,">");
+ //popup a message windows to let the use copy the error
+ newwindow=window.open('','','menubar=1,scrollbars=1,width=400,height=300,resizable=1') ;
+ //menubar=1,location=1,status=1,
+ newwindow.document.writeln('<html> <head> <title>Error Parsing GetCapabilties<\/title> <\/head> <body><pre><code>');
+ newwindow.document.writeln(OpenLayers.Ajax.escape(error));
+ newwindow.document.writeln('<\/code><\/pre> <\/body> <\/html>');
+ newwindow.document.close();
+ };
+ //return alert('the browser is not able to parse this GetCapabilities. Try with Firefox ;-) ');
+
+
+ } catch(e){
+ alert(e.description);
+ }
+ }
+
+ if(typeof xml=='object'){
+
+
+ //Check exceptionsValue
+ var exceptions = xml.getElementsByTagName('Exception');
+ if(exceptions.length){
+ var aFormats = exceptions[0].getElementsByTagName('Format');
+ var exceptionsValue = this.WMSManager.exceptionsValue;
+ var formatExists = null;
+ var oFormats = [];
+ for(i=0;i<aFormats.length;i++){
+ //var format =(aFormats[i].textContent)? aFormats[i].textContent:aFormats[i].text;
+ //var format = OpenLayers.Ajax.getText(aFormats[i]);
+ try{
+ var format = OpenLayers.Ajax.getText(aFormats[i]);
+ } catch(e){alert(e)};
+ if(format ==exceptionsValue) formatExists = true;
+ else oFormats.push(format);
+ }
+ //if default format is not supported use the first usable
+ if(!formatExists) this.WMSManager.exceptionsValue = oFormats[0];
+ }
+
+
+
+ //Check GetMap Formats
+ //var GetMap = xml.getElementsByTagName('GetMap');
+ var GetMap = xml.getElementsByTagName('GetMap');
+ if(GetMap.length){
+ var aFormats = GetMap[0].getElementsByTagName('Format');
+ var oFormats = [];
+ for(i=0;i<aFormats.length;i++){
+ //var format =(aFormats[i].textContent)? aFormats[i].textContent:aFormats[i].text;
+ if(aFormats[i])var format = OpenLayers.Ajax.getText(aFormats[i]);
+ if(format == 'image/png' || format == 'image/jpeg' || format == 'image/gif')oFormats.push(format);
+ }
+
+ this.WMSManager.aImageFormats = oFormats;
+
+ }
+
+
+ //Check resolutionsValue for TileCache
+ var resolutions = xml.getElementsByTagName('Resolutions');
+ if(resolutions.length){
+ //var resolutionsS = resolutions[0].textContent;
+ var resolutionsS = OpenLayers.Ajax.getText(resolutions[0]);
+ if(resolutionsS.length){
+ var aResolutions = resolutionsS.split(' ');
+ //this.WMSManager.resolutionsValue = resolutionsS.replace(" ",",");
+ this.WMSManager.resolutionsValue = aResolutions;
+ }
+
+ }
+
+ //Print Layer List
+ var aLayer = xml.getElementsByTagName('Layer');
+ if(aLayer.length>0){
+ //this.WMSManager.drawLayersForm(xml);
+ this.WMSManager.drawLayersForm(xml);
+ }
+
+ } else {
+ alert('connection error: response is not an object');
+ }
+
+ },
+
+
+
+
+
+
+ /**
+ * @private
+ *
+ * @param {Event} evt
+ */
+ searchCatalogue: function(obj) {
+ var str = obj.WMSManager.catalogueInput.value;
+ console.log(str);
+ obj.WMSManager.catalogueLog.innerHTML ='';
+
+ var url ="catalogue/fake_catalogue_response.xml";
+
+ if(url.length>0) {
+ this.catalogueURL = url;
+ } else {
+ alert('no server selected. please select one.');
+ return;
+ }
+ if (this.catalogueURL.indexOf('?') == -1)
+ {
+ this.catalogueURL = this.baseURL + '?';
+ }
+ else
+ {
+ if (this.catalogueURL.charAt( this.catalogueURL.length - 1 ) == '&')
+ this.catalogueURL = this.catalogueURL.slice( 0, -1 );
+ }
+ /*
+ this.catalogueURL = this.catalogueURL+ "&service=WMS";
+ this.catalogueURL = this.catalogueURL + "&version=1.1.1";
+ this.catalogueURL = this.catalogueURL + "&request=GetCapabilities";
+ */
+
+ obj.WMSManager.catalogueLog.innerHTML = "Loading Layers list... please wait...";
+ //$('wmsManagerOutput').innerHTML = this.baseURL;
+ //alert(this.baseURL);
+ OpenLayers.loadURL(url, null, obj, obj.WMSManager.parseCatalogueResponse);
+ },
+
+ /**
+ * @private
+ *
+ * @param {XMLHttpRequest} ajaxRequest
+ */
+ parseCatalogueResponse: function(ajaxRequest) {
+ var text = ajaxRequest.responseText;
+
+ //var oDomDoc = Sarissa.getDomDocument();
+
+ //myregexp = new RegExp('<!--[^(-->)]*-->');
+ text = text.replace(/<!--.*?-->/g, ''); //Helped with ESA server
+ text = text.replace(/\[.<!.*?>.\]/g, ''); //Helped with ESA server
+ text = text.replace(/<GetTileService>.*?GetTileService>/g, '');//skip NASA DTD error
+
+ var xml = OpenLayers.parseXMLString(text);
+ console.log(xml);
+ if(xml == null) return alert('incorrect content: check your Catalogue url');
+ if(xml.childNodes.length==0) {
+ try{
+ if(OpenLayers.Ajax.getParseErrorText(xml) == OpenLayers.Ajax.PARSED_OK){
+ // The document was parsed/loaded just fine, go on
+ //alert(xml);
+ alert('no Layers available on this server');
+ }
+ else{
+ // The document was not loaded correctly! Inform the user:
+ var error = OpenLayers.Ajax.getParseErrorText(xml);
+ //alert(error);
+ var newwindow;
+ //Encode the xml inside the error message
+ //encodedHtml = error;
+ //encodedHtml = encodedHtml.replace(/</g,"<");
+ //encodedHtml = encodedHtml.replace(/>/g,">");
+ //popup a message windows to let the use copy the error
+ newwindow=window.open('','','menubar=1,scrollbars=1,width=400,height=300,resizable=1') ;
+ //menubar=1,location=1,status=1,
+ newwindow.document.writeln('<html> <head> <title>Error Parsing GetCapabilties<\/title> <\/head> <body><pre><code>');
+ newwindow.document.writeln(OpenLayers.Ajax.escape(error));
+ newwindow.document.writeln('<\/code><\/pre> <\/body> <\/html>');
+ newwindow.document.close();
+ };
+ //return alert('the browser is not able to parse this GetCapabilities. Try with Firefox ;-) ');
+
+
+ } catch(e){
+ alert(e.description);
+ }
+ }
+ //console.log('vicino');
+ if(typeof xml=='object'){
+
+ //console.dirxml(xml);
+ //console.log('dentro');
+ //Print Layer List
+ var aLayer = xml.getElementsByTagName('Layer');
+ if(aLayer.length>0){
+ //this.WMSManager.drawLayersForm(xml);
+ this.WMSManager.drawCatalogueForm(xml);
+ //console.log('dentro layers');
+ }
+
+ } else {
+ alert('connection error: response is not an object');
+ }
+
+ },
+
+ /**
+ * @private
+ *
+ * @param {XMLHttpRequest} ajaxRequest
+ */
+ drawLayersForm: function(xml) {
+
+ // DOM OBJECTS
+ var formObj = this.olServerList;
+
+
+
+ //div to show layer info
+ var infoDiv = document.createElement('div');
+ infoDiv.className = 'wmsLayerListOutput';
+
+ infoDiv.innerHTML = 'Click on a layer to have details';
+
+ //alert('1');
+ //get Extent (to implent BoundingBox alternative)
+ //this is a generical catch for a bbox the refining comes when layers are parsed
+ var bbox = xml.getElementsByTagName('LatLonBoundingBox')[0];
+ if(!bbox) bbox = xml.getElementsByTagName('BoundingBox')[0];
+ this.extent = [bbox.getAttribute('minx'),bbox.getAttribute('miny'),bbox.getAttribute('maxx'),bbox.getAttribute('maxy')];
+ this.mapCenter = [((bbox.getAttribute('maxx') - bbox.getAttribute('minx'))/2),((bbox.getAttribute('maxy') - bbox.getAttribute('miny'))/2)];
+
+
+ //getCapabilities
+ var Capability = xml.getElementsByTagName('Capability')[0];
+ var layerCont = this.findChildByName(Capability,'Layer');
+
+
+
+ var aLayers = this.findChildrenByName(layerCont,'Layer');
+ //var aLayers = layerCont.childNodes;
+
+ //try to look for nested layers
+ //ex: http://www.andaluciajunta.es/IDEAndalucia/IDEAwms/wms/MTA100v?
+ var aLayersTemp = [];
+
+ //alert(aLayers.length);
+ for(i=0;i<aLayers.length;i++){
+ try{
+
+ //alert('i: '+i);
+ aLayersTemp.push(aLayers[i]);
+ var n = aLayers[i];
+ var nameNode = this.findChildByName(n,'Name');
+ //if(nameNode)var Name =(nameNode.textContent)? nameNode.textContent:nameNode.text;
+ //else var Name = null;
+ if(nameNode)var Name =OpenLayers.Ajax.getText(nameNode);
+ else var Name = null;
+
+ var titleNode = this.findChildByName(n,'Title');
+ //if(titleNode)var Title =(titleNode.textContent)? titleNode.textContent:titleNode.text;
+ //else var Title = null;
+ if(titleNode)var Title = OpenLayers.Ajax.getText(titleNode);
+ else var Title = null;
+
+
+ var x = n.firstChild;
+ } catch(e){alert(e)}
+
+ do {
+ if(x.nodeType==1 && x.nodeName=='Layer'){
+
+ var nameNodeN = this.findChildByName(n,'Name');
+ var titleNodeN = this.findChildByName(n,'Title');
+ //alert(nameNodeN);
+ if(!nameNodeN && titleNodeN) aLayersTemp.push(x);
+ }
+
+ x=x.nextSibling;
+
+ }while (x!=n.lastChild)
+
+
+ }
+
+
+
+ //aLayers.concat(aLayersTemp);
+ aLayers = aLayersTemp;
+ //alert(aLayers.length);
+
+
+ var myselect = $('wmsLayerList');
+ if( myselect)myselect.parentNode.removeChild(myselect);
+ var select = document.createElement('select');
+ select.name = 'wmsLayerList';
+ //select.onchange = this.addWMSLayer;
+ select.id = 'wmsLayerList';
+ select.WMSManager = this;
+ //select.style.width = "220px";
+ select.multiple = 'true';
+ select.size = 5;
+ var j = 0;
+ //var opt = new Option( 'select a Layer', '', true, true );
+ //select[j++] = opt;
+ for(i=0;i<aLayers.length;i++){
+ try{
+ var nameNode = this.findChildByName(aLayers[i],'Name');
+ //if(nameNode)var Name =(nameNode.textContent)? nameNode.textContent:nameNode.text;
+ //else var Name = null;
+ if(nameNode)var Name =OpenLayers.Ajax.getText(nameNode);
+ else var Name = null;
+ //alert(nameNode.data);
+
+
+ var titleNode = this.findChildByName(aLayers[i],'Title');
+ //if(titleNode)var Title =(titleNode.textContent)? titleNode.textContent:titleNode.text;
+ //else var Title = null;
+ if(titleNode)var Title =OpenLayers.Ajax.getText(titleNode);
+ else var Title = null;
+
+
+ var abstractNode = this.findChildByName(aLayers[i],'Abstract');
+ //if(abstractNode) var Abstract =(abstractNode.textContent)? abstractNode.textContent:abstractNode.text;
+ //else var Abstract = null;
+ if(abstractNode)var Abstract =OpenLayers.Ajax.getText(abstractNode);
+ else var Abstract = null;
+
+ var queryable = aLayers[i].getAttribute('queryable');
+
+ var qTitle = Title + ' (q)';
+ qTitle =(queryable==1)?qTitle :Title;
+ select[j++] = new Option(qTitle,Name,false,false);
+ select.options[i].Title = Title;
+
+ //Legend sta dentro Style
+ 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);
+ }
+
+ }
+
+
+ //this should be changed with an <optgroup label="Title">
+ if(!Name && Title) {
+ select.options[i].disabled = true;
+ } else {
+ select.options[i].Name = Name;
+ select.options[i].Abstract = Abstract;
+ select.options[i].queryable = queryable;
+ select.options[i].LegendURL = LegendURL;
+ select.options[i].infoDiv = infoDiv;
+ select.onchange = function(){
+ var option = this[this.selectedIndex];
+ var outObj = option.infoDiv;
+ var queryable = (option.queryable>0)?'true -> (q)':'false';
+ var mess = '<b>Layer Name:</b><br>'+option.Name +'<br><br><b>Layer Title:</b><br>'+option.Title
+ +'<br><br><b>Abstract:</b><br>'+option.Abstract+'<br><br><b>Queryable:</b><br>'+queryable;
+ outObj.innerHTML = mess;
+
+ if(option.LegendURL)outObj.innerHTML += '<br><br><b>Legend Image:</b><br><img src="'+option.LegendURL+'">';
+ else outObj.innerHTML += '<br><br><b>Legend Image:</b><br>none';
+
+ };
+ }
+
+
+
+
+ var bboxNode = this.findChildByName(aLayers[i],'BoundingBox');
+ var latbboxNode = this.findChildByName(aLayers[i],'LatLonBoundingBox');
+
+ if (latbboxNode){
+ var bbox = latbboxNode;
+ var BoundingBox = [bbox.getAttribute('minx'),bbox.getAttribute('miny'),bbox.getAttribute('maxx'),bbox.getAttribute('maxy')];
+ } else if(bboxNode){
+ var bbox = bboxNode;
+ var BoundingBox = [bbox.getAttribute('minx'),bbox.getAttribute('miny'),bbox.getAttribute('maxx'),bbox.getAttribute('maxy')];
+ } else if(this.extent){
+ var BoundingBox = this.extent;
+ }
+ else return alert('no bbox defined, check getCapabilities configuration');
+
+
+
+ this.aWMSLayers.push([Name,Title,Abstract,BoundingBox,LegendURL,queryable]);
+ }catch(e){alert(e);}
+
+ }
+ //formObj.appendChild(select);
+ this.layerStuff.appendChild(select);
+
+ //alert('5');
+ this.overlayButton = document.createElement('input');
+ this.overlayButton.name = 'WMSradioB';
+ this.overlayButton.className = 'wmsLayerButton';
+ this.overlayButton.type = 'checkbox';
+ this.overlayButton.value = 'overlay';
+ OpenLayers.Event.observe(this.overlayButton, "mouseup", this.onOverlayClick.bindAsEventListener(this.overlayButton));
+
+ var radioSoverlay = document.createElement('span');
+ radioSoverlay.innerHTML = 'overlay';
+ radioSoverlay.id = 'wmsLayerButtonSpan';
+ radioSoverlay.style.width = '5em';
+ radioSoverlay.style.border = '1px solid black';
+ radioSoverlay.button = this.overlayButton;
+ radioSoverlay.WMSManager = this;
+
+ OpenLayers.Event.observe(radioSoverlay, "mouseup", this.onOverlayClick.bindAsEventListener(this.overlayButton));
+
+ var br = document.createElement('br');
+
+ var button = document.createElement('input');
+ button.onclick = this.addWMSLayer;
+ button.WMSManager = this;
+ button.value = 'add layer';
+ button.type = 'button';
+
+
+ var layerBox = document.createElement('div');
+ layerBox.id = 'wmsLayerBox';
+
+ //Buttons to switch layers up and down
+ var aSwitchUp = document.createElement("a");
+ aSwitchUp.innerHTML = '<span>↑</span>';
+ aSwitchUp.className = 'olWMSLayerSwitch';
+ aSwitchUp.select = select;
+ aSwitchUp.onclick = function(){
+ var obj = this.select;
+ //alert(obj[obj.selectedIndex].value);
+ var sel = new Array();
+ for (var i=0; i<obj.length; i++) {
+ if (obj[i].selected == true) {
+ sel[sel.length] = i;
+ }
+ }
+ for (i in sel) {
+ if (sel[i] != 0 && !obj[sel[i]-1].selected) {
+ var tmp = new Array((document.body.innerHTML ? obj[sel[i]-1].innerHTML : obj[sel[i]-1].text), obj[sel[i]-1].value, obj[sel[i]-1].style.color, obj[sel[i]-1].style.backgroundColor, obj[sel[i]-1].className, obj[sel[i]-1].id);
+ if (document.body.innerHTML) obj[sel[i]-1].innerHTML = obj[sel[i]].innerHTML;
+ else obj[sel[i]-1].text = obj[sel[i]].text;
+ obj[sel[i]-1].value = obj[sel[i]].value;
+ obj[sel[i]-1].style.color = obj[sel[i]].style.color;
+ obj[sel[i]-1].style.backgroundColor = obj[sel[i]].style.backgroundColor;
+ obj[sel[i]-1].className = obj[sel[i]].className;
+ obj[sel[i]-1].id = obj[sel[i]].id;
+ if (document.body.innerHTML) obj[sel[i]].innerHTML = tmp[0];
+ else obj[sel[i]].text = tmp[0];
+ obj[sel[i]].value = tmp[1];
+ obj[sel[i]].style.color = tmp[2];
+ obj[sel[i]].style.backgroundColor = tmp[3];
+ obj[sel[i]].className = tmp[4];
+ obj[sel[i]].id = tmp[5];
+ obj[sel[i]-1].selected = true;
+ obj[sel[i]].selected = false;
+ }
+ }
+ };
+ var aSwitchDown = document.createElement("a");
+ aSwitchDown.innerHTML = '<span>↓</span>';
+ aSwitchDown.className = 'olWMSLayerSwitch';
+ aSwitchDown.select = select;
+ aSwitchDown.onclick = function(){
+ var obj = this.select;
+ //alert(obj[obj.selectedIndex].value);
+ var sel = [];
+ for (var i=obj.length-1; i>-1; i--) {
+ if (obj[i].selected == true) {
+ sel[sel.length] = i;
+ }
+ }
+ for (i in sel) {
+ if (sel[i] != obj.length-1 && !obj[sel[i]+1].selected) {
+ var tmp = new Array((document.body.innerHTML ? obj[sel[i]+1].innerHTML : obj[sel[i]+1].text), obj[sel[i]+1].value, obj[sel[i]+1].style.color, obj[sel[i]+1].style.backgroundColor, obj[sel[i]+1].className, obj[sel[i]+1].id);
+ if (document.body.innerHTML) obj[sel[i]+1].innerHTML = obj[sel[i]].innerHTML;
+ else obj[sel[i]+1].text = obj[sel[i]].text;
+ obj[sel[i]+1].value = obj[sel[i]].value;
+ obj[sel[i]+1].style.color = obj[sel[i]].style.color;
+ obj[sel[i]+1].style.backgroundColor = obj[sel[i]].style.backgroundColor;
+ obj[sel[i]+1].className = obj[sel[i]].className;
+ obj[sel[i]+1].id = obj[sel[i]].id;
+ if (document.body.innerHTML) obj[sel[i]].innerHTML = tmp[0];
+ else obj[sel[i]].text = tmp[0];
+ obj[sel[i]].value = tmp[1];
+ obj[sel[i]].style.color = tmp[2];
+ obj[sel[i]].style.backgroundColor = tmp[3];
+ obj[sel[i]].className = tmp[4];
+ obj[sel[i]].id = tmp[5];
+ obj[sel[i]+1].selected = true;
+ obj[sel[i]].selected = false;
+ }
+ }
+ };
+
+ //Image type chooser
+ this.selectImageType = document.createElement('select');
+ this.selectImageType.className = 'wmsLayerSelectImageType';
+ //alert(this.aImageFormats.length);
+
+ for(i=0;i<this.aImageFormats.length;i++){
+ var format = this.aImageFormats[i];
+ this.selectImageType[i]= new Option(format, format, false, false );
+ }
+
+ //mount interface
+ layerBox.appendChild(aSwitchUp);
+ layerBox.appendChild(aSwitchDown);
+ layerBox.appendChild(radioSoverlay);
+ layerBox.appendChild(this.overlayButton);
+ layerBox.appendChild(br);
+ layerBox.appendChild(this.selectImageType);
+ layerBox.appendChild(button);
+ layerBox.appendChild(infoDiv);
+
+ this.layerStuff.appendChild(layerBox);
+ //formObj.appendChild();
+
+
+
+ $('wmsManagerOutput').innerHTML = '';
+ },
+
+
+
+ /**
+ * @private
+ *
+ * @param {XMLHttpRequest} ajaxRequest
+ */
+ drawCatalogueForm: function(xml) {
+
+ if(!this.catalogueDivForm ){
+ this.catalogueDivForm = document.createElement('div');
+ this.catalogueDivForm.className = 'catalogueListOutput';
+
+ } else {
+ this.catalogueDivForm.innerHTML = '';
+ }
+
+
+
+ //div to show layer info
+ var infoDiv = document.createElement('div');
+ infoDiv.className = 'catalogueInfoDiv';
+
+ infoDiv.innerHTML = 'Click on a layer to have details';
+ this.catalogueDivForm.appendChild(infoDiv);
+ this.catalogueLog.innerHTML = '';
+
+
+ var aLayers = xml.getElementsByTagName('Layer');
+ //var aLayers = layerCont.childNodes;
+
+ console.log(aLayers);
+ //try to look for nested layers
+ //ex: http://www.andaluciajunta.es/IDEAndalucia/IDEAwms/wms/MTA100v?
+ var aLayersTemp = [];
+ //alert(aLayers.length);
+ for(i=0;i<aLayers.length;i++){
+ //try{
+
+ //alert('i: '+i);
+ aLayersTemp.push(aLayers[i]);
+
+ /*
+ var n = aLayers[i];
+ var nameNode = this.findChildByName(n,'Name');
+ //if(nameNode)var Name =(nameNode.textContent)? nameNode.textContent:nameNode.text;
+ //else var Name = null;
+ if(nameNode)var Name =OpenLayers.Ajax.getText(nameNode);
+ else var Name = null;
+
+ var titleNode = this.findChildByName(n,'Title');
+ //if(titleNode)var Title =(titleNode.textContent)? titleNode.textContent:titleNode.text;
+ //else var Title = null;
+ if(titleNode)var Title = OpenLayers.Ajax.getText(titleNode);
+ else var Title = null;
+
+ */
+
+ /*var x = n.firstChild;
+
+ } catch(e){alert(e)}
+
+ do {
+ if(x.nodeType==1 && x.nodeName=='Layer'){
+
+ var nameNodeN = this.findChildByName(n,'Name');
+ var titleNodeN = this.findChildByName(n,'Title');
+ //alert(nameNodeN);
+ if(!nameNodeN && titleNodeN) aLayersTemp.push(x);
+ }
+
+ x=x.nextSibling;
+
+ }while (x!=n.lastChild)
+ */
+
+ }
+
+
+
+ //aLayers.concat(aLayersTemp);
+ aLayers = aLayersTemp;
+ //alert(aLayers.length);
+
+
+ var myselect = $('wmsLayerList');
+ if( myselect)myselect.parentNode.removeChild(myselect);
+ var select = document.createElement('select');
+ select.name = 'wmsLayerList';
+ //select.onchange = this.addWMSLayer;
+ select.id = 'wmsLayerList';
+ select.WMSManager = this;
+ //select.style.width = "220px";
+ //select.multiple = 'true';
+ //select.size = 5;
+ var j = 0;
+ var opt = new Option( 'select a Layer', '', true, true );
+ select[j++] = opt;
+ for(i=1;i<=aLayers.length;i++){
+ try{
+ var layer= aLayers[i-1];
+
+ var Name = layer.getAttribute('name');
+ console.log(Name);
+ //console.dirxml(aLayers[i]);
+
+
+ var Title = layer.getAttribute('title');
+
+ var HREF = layer.getAttribute('href');
+ var Type = layer.getAttribute('type');
+
+ var Abstract = layer.getAttribute('abstract');
+
+
+ var queryable = layer.getAttribute('queryable');
+
+ var qTitle = Title + ' (q)';
+ qTitle =(queryable==1)?qTitle :Title;
+ select[j++] = new Option(qTitle,Name,false,false);
+ select.options[i].Title = Title;
+
+ //Legend sta dentro Style
+ var LegendURL = null;
+
+ var legendNode = layer.getElementsByTagName('LegendURL')[0];
+ if(legendNode) {
+ var OnlineResourceNode = this.findChildByName(legendNode,'OnlineResource');
+ if(OnlineResourceNode){
+ LegendURL = OnlineResourceNode.getAttribute('xlink:href');
+ //alert(LegendURL);
+ }
+
+ }
+
+
+ select.options[0].infoDiv = infoDiv;
+ //this should be changed with an <optgroup label="Title">
+ if(!Name && Title) {
+ select.options[i].disabled = true;
+ } else {
+ select.options[i].Name = Name;
+ select.options[i].Abstract = Abstract;
+ select.options[i].queryable = queryable;
+ select.options[i].LegendURL = LegendURL;
+ select.options[i].HREF = HREF;
+ select.options[i].Type = Type;
+ select.options[i].infoDiv = infoDiv;
+ select.onchange = function(){
+ var option = this[this.selectedIndex];
+ var outObj = option.infoDiv;
+ var queryable = (option.queryable>0)?'true -> (q)':'false';
+ if(option.Name){
+ var mess = '<b>Layer Name:</b><br>'+option.Name +'<br><br><b>Layer Title:</b><br>'+option.Title
+ +'<br><br><b>Abstract:</b><br>'+option.Abstract
+ +'<br><br><b>HREF:</b><br>'+option.HREF
+ +'<br><br><b>Type:</b><br>'+option.Type
+ +'<br><br><b>Queryable:</b><br>'+queryable;
+ if(option.LegendURL)mess += '<br><br><b>Legend Image:</b><br><img src="'+option.LegendURL+'">';
+ else mess += '<br><br><b>Legend Image:</b><br>none';
+ } else {
+ var mess = 'choose a valid layer from the list'
+ }
+ outObj.innerHTML = mess;
+
+
+
+ };
+ }
+
+
+
+
+ /*var bboxNode = this.findChildByName(layer,'BoundingBox');
+ var latbboxNode = this.findChildByName(layer,'LatLonBoundingBox');
+
+ if (latbboxNode){
+ var bbox = latbboxNode;
+ var BoundingBox = [bbox.getAttribute('minx'),bbox.getAttribute('miny'),bbox.getAttribute('maxx'),bbox.getAttribute('maxy')];
+ } else if(bboxNode){
+ var bbox = bboxNode;
+ var BoundingBox = [bbox.getAttribute('minx'),bbox.getAttribute('miny'),bbox.getAttribute('maxx'),bbox.getAttribute('maxy')];
+ } else if(this.extent){
+ var BoundingBox = this.extent;
+ }
+ else return alert('no bbox defined, check getCapabilities configuration');
+ */
+ BoundingBox = [-180,-90,180,90];
+
+ //this.aWMSLayers.push([Name,Title,Abstract,BoundingBox,LegendURL,queryable]);
+ this.aWMSLayers.push([Name,Title,Abstract,BoundingBox,HREF,queryable]);
+ }catch(e){alert(e);}
+
+ }
+ //formObj.appendChild(select);
+ this.catalogueSelect = select;
+ this.catalogueDivForm.appendChild(select);
+
+ //alert('5');
+ this.overlayButton = document.createElement('input');
+ this.overlayButton.name = 'WMSradioB';
+ this.overlayButton.className = 'wmsLayerButton';
+ this.overlayButton.type = 'checkbox';
+ this.overlayButton.value = 'overlay';
+ OpenLayers.Event.observe(this.overlayButton, "mouseup", this.onOverlayClick.bindAsEventListener(this.overlayButton));
+
+ var radioSoverlay = document.createElement('span');
+ radioSoverlay.innerHTML = 'overlay';
+ radioSoverlay.id = 'wmsLayerButtonSpan';
+ radioSoverlay.style.width = '5em';
+ radioSoverlay.style.border = '1px solid black';
+ radioSoverlay.button = this.overlayButton;
+ radioSoverlay.WMSManager = this;
+
+ OpenLayers.Event.observe(radioSoverlay, "mouseup", this.onOverlayClick.bindAsEventListener(this.overlayButton));
+
+ var br = document.createElement('br');
+
+ var button = document.createElement('input');
+ button.onclick = this.addCatalogueLayer;
+ button.WMSManager = this;
+ button.value = 'add layer';
+ button.type = 'button';
+
+
+ var layerBox = document.createElement('div');
+ layerBox.id = 'wmsLayerBox';
+
+ //Buttons to switch layers up and down
+ var aSwitchUp = document.createElement("a");
+ aSwitchUp.innerHTML = '<span>↑</span>';
+ aSwitchUp.className = 'olWMSLayerSwitch';
+ aSwitchUp.select = select;
+ aSwitchUp.onclick = function(){
+ var obj = this.select;
+ //alert(obj[obj.selectedIndex].value);
+ var sel = new Array();
+ for (var i=0; i<obj.length; i++) {
+ if (obj[i].selected == true) {
+ sel[sel.length] = i;
+ }
+ }
+ for (i in sel) {
+ if (sel[i] != 0 && !obj[sel[i]-1].selected) {
+ var tmp = new Array((document.body.innerHTML ? obj[sel[i]-1].innerHTML : obj[sel[i]-1].text), obj[sel[i]-1].value, obj[sel[i]-1].style.color, obj[sel[i]-1].style.backgroundColor, obj[sel[i]-1].className, obj[sel[i]-1].id);
+ if (document.body.innerHTML) obj[sel[i]-1].innerHTML = obj[sel[i]].innerHTML;
+ else obj[sel[i]-1].text = obj[sel[i]].text;
+ obj[sel[i]-1].value = obj[sel[i]].value;
+ obj[sel[i]-1].style.color = obj[sel[i]].style.color;
+ obj[sel[i]-1].style.backgroundColor = obj[sel[i]].style.backgroundColor;
+ obj[sel[i]-1].className = obj[sel[i]].className;
+ obj[sel[i]-1].id = obj[sel[i]].id;
+ if (document.body.innerHTML) obj[sel[i]].innerHTML = tmp[0];
+ else obj[sel[i]].text = tmp[0];
+ obj[sel[i]].value = tmp[1];
+ obj[sel[i]].style.color = tmp[2];
+ obj[sel[i]].style.backgroundColor = tmp[3];
+ obj[sel[i]].className = tmp[4];
+ obj[sel[i]].id = tmp[5];
+ obj[sel[i]-1].selected = true;
+ obj[sel[i]].selected = false;
+ }
+ }
+ };
+ var aSwitchDown = document.createElement("a");
+ aSwitchDown.innerHTML = '<span>↓</span>';
+ aSwitchDown.className = 'olWMSLayerSwitch';
+ aSwitchDown.select = select;
+ aSwitchDown.onclick = function(){
+ var obj = this.select;
+ //alert(obj[obj.selectedIndex].value);
+ var sel = [];
+ for (var i=obj.length-1; i>-1; i--) {
+ if (obj[i].selected == true) {
+ sel[sel.length] = i;
+ }
+ }
+ for (i in sel) {
+ if (sel[i] != obj.length-1 && !obj[sel[i]+1].selected) {
+ var tmp = new Array((document.body.innerHTML ? obj[sel[i]+1].innerHTML : obj[sel[i]+1].text), obj[sel[i]+1].value, obj[sel[i]+1].style.color, obj[sel[i]+1].style.backgroundColor, obj[sel[i]+1].className, obj[sel[i]+1].id);
+ if (document.body.innerHTML) obj[sel[i]+1].innerHTML = obj[sel[i]].innerHTML;
+ else obj[sel[i]+1].text = obj[sel[i]].text;
+ obj[sel[i]+1].value = obj[sel[i]].value;
+ obj[sel[i]+1].style.color = obj[sel[i]].style.color;
+ obj[sel[i]+1].style.backgroundColor = obj[sel[i]].style.backgroundColor;
+ obj[sel[i]+1].className = obj[sel[i]].className;
+ obj[sel[i]+1].id = obj[sel[i]].id;
+ if (document.body.innerHTML) obj[sel[i]].innerHTML = tmp[0];
+ else obj[sel[i]].text = tmp[0];
+ obj[sel[i]].value = tmp[1];
+ obj[sel[i]].style.color = tmp[2];
+ obj[sel[i]].style.backgroundColor = tmp[3];
+ obj[sel[i]].className = tmp[4];
+ obj[sel[i]].id = tmp[5];
+ obj[sel[i]+1].selected = true;
+ obj[sel[i]].selected = false;
+ }
+ }
+ };
+
+ //Image type chooser
+ this.selectImageType = document.createElement('select');
+ this.selectImageType.className = 'wmsLayerSelectImageType';
+ //alert(this.aImageFormats.length);
+
+
+ //THIS IS BAD -> need request to getCapabilities to check.
+ this.aImageFormats = ['image/jpeg','image/png','img/gif'];
+
+ for(i=0;i<this.aImageFormats.length;i++){
+ var format = this.aImageFormats[i];
+ this.selectImageType[i]= new Option(format, format, false, false );
+ }
+
+ //mount interface
+ //this.catalogueDivForm.appendChild(aSwitchUp);
+ //this.catalogueDivForm.appendChild(aSwitchDown);
+ this.catalogueDivForm.appendChild(radioSoverlay);
+ this.catalogueDivForm.appendChild(this.overlayButton);
+ this.catalogueDivForm.appendChild(br);
+ this.catalogueDivForm.appendChild(this.selectImageType);
+ this.catalogueDivForm.appendChild(br);
+ this.catalogueDivForm.appendChild(button);
+ this.catalogueDivForm.appendChild(infoDiv);
+
+ //this.layerStuff.appendChild(layerBox);
+ //formObj.appendChild();
+
+ this.olCatalogue.appendChild(this.catalogueDivForm);
+
+ $('wmsManagerOutput').innerHTML = '';
+ },
+
+
+
+ /**
+ * @private
+ *
+ */
+ findChildByName: function(n,name) {
+ if(!n)return false;
+ var x = n.firstChild;
+ while (x)
+ {
+ if(x.nodeName==name) return x;
+ else if(x==n.lastChild)return null;
+ else x=x.nextSibling;
+ }
+ },
+
+ /**
+ * @private
+ *
+ */
+ findChildrenByName: function(n,name) {
+ if(!n)return false;
+ var nodes=n.childNodes;
+ var aNode = [];
+ for (i=0;i<nodes.length;i++) {
+ var x=n.childNodes[i];
+ if(x.nodeName==name) aNode.push(x) ;
+ }
+
+ return aNode;
+ },
+
+ /**
+ * @private
+ *
+ */
+ addWMSLayer: function() {
+ var select1 = $('wmsServerList');
+ var select2 = $('wmsLayerList');
+
+ if(select1) var url = select1[select1.selectedIndex].value;
+ else url ="";
+
+ var layerA = [];
+ var titleA = [];
+ for(i = 0; i < select2.options.length; i++) {
+ if(select2.options[i].selected) {
+ layerA.push(select2.options[i].value);
+ if(select2.options[i].textContent)titleA.push(select2.options[i].textContent);
+ else titleA.push(select2.options[i].text);
+ }
+ }
+ if(layerA.length) var layerName = layerA.join(',');
+ else layerName ="";
+ if(titleA.length) var title = titleA.join(', ');
+ else title = layer;
+
+ if(url.length<1) {
+ alert('no server selected. please select one.');
+ return;
+ }
+ if(layerName.length<1) {
+ alert('no layer selected. please select one.');
+ return;
+ }
+
+ if (url.indexOf('?') == -1)
+ {
+ url = url + '?';
+ }
+ else
+ {
+ if (url.charAt( url.length - 1 ) == '&')
+ url = url.slice( 0, -1 );
+ }
+
+
+ //create layer add with OL
+ /*
+ * need to check if PNG is supported by the server
+ */
+
+
+ //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 = this.WMSManager.overlayButton;
+
+
+ //check for base layer
+ var layers = this.WMSManager.map.layers.slice();
+ var hasBaseLayer = false;
+ for(i=0;i<layers.length;i++){
+ layer = layers[i];
+ if(layer.isBaseLayer) hasBaseLayer = true;
+ }
+ if(overlayButton.checked) if(!hasBaseLayer)return alert('you need a base layer before setting an overlay') ;
+
+ //manage exceptions
+ if(this.WMSManager.exceptionsValue)
+ var exception = this.WMSManager.exceptionsValue;
+
+
+ if(this.WMSManager.resolutionsValue){
+ var aResolutions = this.WMSManager.resolutionsValue;
+ var minRes = aResolutions[aResolutions.length -1];
+ var options = {resolutions: aResolutions, maxresolution: aResolutions[0], minResolution: minRes};
+ this.WMSManager.map.setOptions(options) ;
+ }
+
+ //SRS - OL default srs is EPSG:4326
+ /*var options = {srs: 'EPSG:4326'};
+ this.WMSManager.map.setOptions(options) ;
+ */
+
+ //IMAGE TYPE
+ var imageType = this.WMSManager.selectImageType[this.WMSManager.selectImageType.selectedIndex].value;
+
+
+ if(overlayButton.checked){
+ if(imageType=='image/jpeg') return alert('you cannot sele