TimeSeriesOL.js
	
	
Summary
	
		No overview generated for 'TimeSeriesOL.js'
	
    
    
 
        
mapbuilder.loadScript(baseDir+"/util/openlayers/OpenLayers.js");
mapbuilder.loadScript(baseDir+"/widget/WidgetBase.js");
mapbuilder.loadScript(baseDir+"/tool/Extent.js");
function TimeSeriesOL(widgetNode, model) {
  WidgetBase.apply(this,new Array(widgetNode, model));
  OpenLayers.ImgPath = config.skinDir + '/images/openlayers/';
  this.containerNodeId = this.htmlTagId;
  model.containerModel = this.model;
  this.node = document.getElementById(this.containerNodeId);
  if(!this.model.extent){
    this.model.extent = new Extent (this.model);
    this.model.addFirstListener( "loadModel", this.model.extent.firstInit, this.model.extent );
  }
  var tileGutter = widgetNode.selectSingleNode("mb:tileGutter");
  
  this.tileGutter = tileGutter ? tileGutter.firstChild.nodeValue : 0;
  
  var tileBuffer = widgetNode.selectSingleNode("mb:tileBuffer");
  
  this.tileBuffer = tileBuffer ? tileBuffer.firstChild.nodeValue : 2;
  
  var tileSize = widgetNode.selectSingleNode("mb:tileSize");
  
  this.tileSize = tileSize ? tileSize.firstChild.nodeValue : 256;
  var imageReproject = widgetNode.selectSingleNode("mb:imageReproject");
  
  this.imageReproject = imageReproject ? imageReproject.firstChild.nodeValue : false;
  
  var imageBuffer = widgetNode.selectSingleNode("mb:imageBuffer");
  
  this.imageBuffer = imageBuffer ? imageBuffer.firstChild.nodeValue : 2;
  
  var displayOutsideMaxExtent = widgetNode.selectSingleNode("mb:displayOutsideMaxExtent");
  
  this.displayOutsideMaxExtent = displayOutsideMaxExtent ? displayOutsideMaxExtent.firstChild.nodeValue : 'false';
  if (this.displayOutsideMaxExtent.toUpperCase == 'FALSE') {
    this.displayOutsideMaxExtent = false;
  }
  
  this.refreshWmsLayers = function(objRef) {
    var uniqueId = (new Date()).getTime();
    var layers = objRef.model.map.layers;
    for (var i in layers) {
      if (layers[i].CLASS_NAME.indexOf('OpenLayers.Layer.WMS') == 0) {
        layers[i].mergeNewParams({uniqueId: uniqueId});
      }
    }
  }
  this.model.addListener("refreshWmsLayers",this.refreshWmsLayers,this);
  this.model.addListener("refresh",this.paint, this);
  this.model.addListener("hidden",this.hidden, this);
  this.model.addListener("addLayer",this.addLayer, this);
  this.model.addListener("deleteLayer",this.deleteLayer, this);
  this.model.addListener("moveLayerUp",this.moveLayerUp, this);
  this.model.addListener("moveLayerDown",this.moveLayerDown, this);
  this.model.addListener("opacity",this.setOpacity,this);
  this.model.addListener("newModel",this.clearWidget2,this);
  this.model.addListener("timestamp",this.timestampListener,this);
}
TimeSeriesOL.prototype.paint = function(objRef, refresh) {
  if(!objRef.model.map || refresh=="sld"){
    if(refresh=="sld") {
      objRef.clearWidget2(objRef);
    }
    if(objRef.model.doc.selectSingleNode("//wmc:OWSContext"))
      objRef.context="OWS";
    else if(objRef.model.doc.selectSingleNode("//wmc:ViewContext"))
      objRef.context="View";
    else
      alert(mbGetMessage("noContextDefined"));
    var proj=objRef.model.proj;
    var maxExtent=null;
    maxExtent=objRef.widgetNode.selectSingleNode("mb:maxExtent");
    maxExtent=(maxExtent)?maxExtent.firstChild.nodeValue.split(" "):null;
    if(!maxExtent){
      maxExtent=objRef.model.getBoundingBox();
    }
    maxExtent=(maxExtent)?new OpenLayers.Bounds(maxExtent[0],maxExtent[1],maxExtent[2],maxExtent[3]):null;
    if(maxExtent==null)alert(mbGetMessage("noBboxInContext"));
    var maxResolution=null;
    maxResolution=objRef.widgetNode.selectSingleNode("mb:maxResolution");
    maxResolution=(maxResolution)?maxResolution.firstChild.nodeValue:"auto";
    var units = proj.units == 'meters' ? 'm' : proj.units;
    var resolutions=objRef.widgetNode.selectSingleNode("mb:resolutions");
    resolutions = resolutions ? resolutions.firstChild.nodeValue.split(",") : null;
    var scales = objRef.widgetNode.selectSingleNode("mb:scales");
    if(scales){
      scales = scales.firstChild.nodeValue.split(",");
      resolutions = new Array();
      for (var s in scales) {
        resolutions.push(OpenLayers.Util.getResolutionFromScale(scales[s], units));
      }
    }
    if(resolutions){
      objRef.model.extent.setZoomLevels(true,resolutions);
    }
    else objRef.model.extent.setZoomLevels(false);
    var fixedSize=null;
    fixedSize=objRef.widgetNode.selectSingleNode("mb:fixedSize");
    fixedSize=(fixedSize)?fixedSize.firstChild.nodeValue:null;
    if(fixedSize=="true"){
      objRef.node.style.width = objRef.model.getWindowWidth()+"px";
      objRef.node.style.height = objRef.model.getWindowHeight()+"px";
    }
    var mapOptions = {
          controls:[],
          projection: proj.srs,
          units: units,
          maxExtent: maxExtent,
          maxResolution: maxResolution,
          resolutions: resolutions,
          theme: config.skinDir+'/openlayers/style.css'
        };
    objRef.model.map = new OpenLayers.Map(objRef.node, mapOptions);
    objRef.model.map.Z_INDEX_BASE.Control=10000;
    var layers = objRef.model.getAllLayers();
    if (!objRef.oLlayers){
      objRef.oLlayers = new Array();
    }
    for (var i=0;i<=layers.length-1;i++){
      objRef.addLayer(objRef,layers[i]);
    }
    var bbox=objRef.model.getBoundingBox();
    objRef.model.map.mbMapPane = objRef;
    objRef.model.map.events.register('moveend', objRef.model.map, objRef.updateContext);
    objRef.model.map.events.register('mouseup', objRef.model.map, objRef.updateMouse);
    
    objRef.model.map.zoomToExtent(new OpenLayers.Bounds(bbox[0],bbox[1],bbox[2],bbox[3]));
   
  }
  
}
TimeSeriesOL.prototype.updateContext = function(e) {
  var objRef = e.object.mbMapPane;
  var bboxOL = objRef.model.map.getExtent().toBBOX().split(',');
  var ul = new Array(bboxOL[0],bboxOL[3]);
  var lr = new Array(bboxOL[2],bboxOL[1]);
  if(objRef.model.getWindowWidth()!=e.element.offsetWidth)
  	objRef.model.setWindowWidth(e.element.offsetWidth);
  if(objRef.model.getWindowHeight()!=e.element.offsetHeight)
  	objRef.model.setWindowHeight(e.element.offsetHeight);	
  var currentAoi = objRef.model.getParam('aoi');
  var newAoi = new Array(ul, lr);
  if (!currentAoi || currentAoi.toString != newAoi.toString()) {
    objRef.model.setBoundingBox( new Array(ul[0], lr[1], lr[0], ul[1]) );
    objRef.model.extent.setSize(objRef.model.map.getResolution());
    objRef.model.setParam("aoi", newAoi);
  }
}
TimeSeriesOL.prototype.updateMouse = function(e) {
  var objRef = e.object.mbMapPane;
  if (objRef.model.map.mbCursor) {
    objRef.model.map.div.style.cursor = objRef.model.map.mbCursor;
  }
  objRef.model.callListeners('mouseup', {evpl: [e.xy.x, e.xy.y]});
}
TimeSeriesOL.prototype.hidden = function(objRef, layerName) {
  var vis=objRef.model.getHidden(layerName);
  if(vis=="1"){ var hidden=false; }
  else {var hidden=true; }
  var  tmpLayer=objRef.getLayer(objRef,layerName)
  if(tmpLayer)tmpLayer.setVisibility(hidden);
}
TimeSeriesOL.prototype.getLayer = function(objRef,layerName) {
  return objRef.model.map.getLayer(objRef.oLlayers[layerName].id);
}
TimeSeriesOL.prototype.deleteLayer = function(objRef, layerName) {
  if(objRef.oLlayers[layerName])objRef.model.map.removeLayer(objRef.oLlayers[layerName]);
}
TimeSeriesOL.prototype.deleteAllLayers = function(objRef) {
  objRef.model.map.destroy();
}
TimeSeriesOL.prototype.moveLayerUp = function(objRef, layerName) {
  var map=objRef.model.map;
  map.raiseLayer(map.getLayer(objRef.oLlayers[layerName].id), 1);
}
TimeSeriesOL.prototype.moveLayerDown = function(objRef, layerName) {
  objRef.model.map.raiseLayer(objRef.getLayer(objRef,layerName), -1);
}
TimeSeriesOL.prototype.setOpacity=function(objRef, layerName){
  var _opacity="1";
  _opacity=objRef.model.getOpacity(layerName);
  objRef.getLayer(objRef,layerName).setOpacity(_opacity);
}
TimeSeriesOL.prototype.addLayer = function(objRef, layerNode) {
  var layer = layerNode;
  var service=layer.selectSingleNode("wmc:Server/@service");service=(service)?service.nodeValue:"";
  var title=layer.selectSingleNode("wmc:Title");title=(title)?title.firstChild.nodeValue:"";
  var name2=layer.selectSingleNode("wmc:Name");name2=(name2)?name2.firstChild.nodeValue:"";
  if (objRef.context=="OWS"){
    var href=layer.selectSingleNode("wmc:Server/wmc:OnlineResource/@xlink:href");href=(href)?href.firstChild.nodeValue:"";
  }
  else {
    var href=layer.selectSingleNode("wmc:Server/wmc:OnlineResource").getAttribute("xlink:href");
  }
  var format=layer.selectSingleNode("wmc:FormatList/wmc:Format");format=(format)?format.firstChild.nodeValue:"image/gif";
  var vis=layer.selectSingleNode("@hidden");
  if (vis) {
    if(vis.nodeValue=="1")
      vis=false;
    else
      vis=true;
  }
  var query=layer.selectSingleNode("@queryable");
  if (query){
    if(query.nodeValue=="1")
      query=true;
    else
      query=false;
  }
  var opacity=layer.selectSingleNode("@opacity");
  if (opacity)
    opacity=opacity.nodeValue;
  else
    opacity=false;
  var currentStyle = layer.selectSingleNode('wmc:StyleList/wmc:Style[@current=1]');
  var animatedImageDivs;
  var layerOptions = {
          visibility: vis,
          transparent: "TRUE",
          projection: objRef.model.map.projection,
          queryable: query,
          maxExtent: objRef.model.map.maxExtent,
          maxResolution: objRef.model.map.maxResolution,  //"auto" if not defined in the context
          alpha: false,            //option for png transparency with ie6
          isBaseLayer: false,
          displayOutsideMaxExtent: objRef.displayOutsideMaxExtent
     };
  switch(service){
    case "OGC":
    case "WMS":
    case "wms":
    case "OGC:WMS":
      if(!objRef.model.map.baseLayer){
        layerOptions.isBaseLayer=true;
      }
      else {
        layerOptions.reproject=objRef.imageReproject;
        layerOptions.isBaseLayer=false;
      }
      
      layerOptions.ratio = objRef.imageBuffer;
      var params = new Array();
      params = sld2UrlParam(currentStyle);
      
            if (objRef.model.timestampList && objRef.model.timestampList.getAttribute("layerName") == name2) { 
	
			var layerId;
 	     	var timestamp = objRef.model.timestampList.childNodes[0];
 	      	
 	      	layerId = objRef.model.id + "_" + objRef.id + "_" + name2;
	      	layerId += "_" + timestamp.firstChild.nodeValue;
	      	
		      objRef.oLlayers[name2]= new OpenLayers.Layer.WMS.Untiled(title,href,{
		          layers: name2,
				  "TIME":timestamp.firstChild.nodeValue,
		          transparent:"TRUE",
		          format: format,
		          sld:params.sld,
		          sld_body:params.sld_body,
		          styles:params.styles
		        },
		        layerOptions
		      );
		      
		  var numNodes = objRef.model.timestampList.childNodes.length;
		  this.animatedImageDivs  = new Array(numNodes);
	}
	else {
	      objRef.oLlayers[name2]= new OpenLayers.Layer.WMS.Untiled(title,href,{
		  layers: name2,
		  transparent:"TRUE",
		  format: format,
		  sld:params.sld,
		  sld_body:params.sld_body,
		  styles:params.styles
		},
		layerOptions
	      );
	}
    break;
    case "WMS-C":
    case "OGC:WMS-C":
      if(!objRef.model.map.baseLayer){
        layerOptions.isBaseLayer=true;
      }
      else {
        layerOptions.reproject=objRef.imageReproject;
        layerOptions.isBaseLayer=false;
      }
      layerOptions.gutter = objRef.tileGutter;
      layerOptions.buffer = objRef.tileBuffer;
      layerOptions.tileSize = new OpenLayers.Size(objRef.tileSize, objRef.tileSize);
      
      var params = new Array();
      params = sld2UrlParam(currentStyle);
      objRef.oLlayers[name2]= new OpenLayers.Layer.WMS(title,href,{
          layers: name2,
          transparent:"TRUE",
          format: format,
          sld:params.sld,
          sld_body:params.sld_body,
          styles:params.styles
        },
        layerOptions
      );
    break;
    case "wfs":
    case "OGC:WFS":
      style = sld2OlStyle(currentStyle);
      if(style){
        layerOptions.style=style;
      }
      else{
        layerOptions.style=objRef.getWebSafeStyle(objRef, 2*i+1);
      }
      layerOptions.featureClass=OpenLayers.Feature.WFS;
      objRef.oLlayers[name2]= new OpenLayers.Layer.WFS(
        title,
        href,{
          typename: name2,
          maxfeatures: 1000},
          layerOptions
        );
    break;
    case "gml":
    case "OGC:GML":
      style = sld2OlStyle(currentStyle);
      if(style){
        layerOptions.style=style;
      }
      else{
        layerOptions.style=objRef.getWebSafeStyle(objRef, 2*i+1);
      }
      objRef.oLlayers[name2] = new OpenLayers.Layer.GML(title,href,layerOptions);
     break;
    case "GMAP":
    case "Google":
      layerOptions.projection="EPSG:41001";
      layerOptions.units="degrees";
      objRef.model.map.units="degrees";
      layerOptions.maxExtent=new OpenLayers.Bounds("-180","-90","180","90");
      layerOptions.isBaseLayer=true;
      objRef.oLlayers[name2] = new OpenLayers.Layer.Google( "Google Satellite" , {type: G_HYBRID_MAP, maxZoomLevel:18},layerOptions );
    break;
    case "YMAP":
    case "Yahoo":
      layerOptions.isBaseLayer=true;
      objRef.oLlayers[name2] = new OpenLayers.Layer.Yahoo( "Yahoo");
    break;
    case "VE":
    case "Microsoft":
      layerOptions.isBaseLayer=true;
      objRef.oLlayers[name2] = new OpenLayers.Layer.VirtualEarth( "VE",{minZoomLevel: 0, maxZoomLevel: 18,type: VEMapStyle.Hybrid});
    break;
    case "MultiMap":
      layerOptions.isBaseLayer=true;
      objRef.oLlayers[name2] = new OpenLayers.Layer.MultiMap( "MultiMap");
    break;
    default:
      alert(mbGetMessage("layerTypeNotSupported", service));
  }
  if(opacity && objRef.oLlayers[name2]){
    objRef.oLlayers[name2].setOpacity(opacity);
  }
  objRef.model.map.addLayer(objRef.oLlayers[name2]);
}
TimeSeriesOL.prototype.getWebSafeStyle = function(objRef, colorNumber) {
  colors=new Array("00","33","66","99","CC","FF");
  colorNumber=(colorNumber)?colorNumber:0;
  colorNumber=(colorNumber<0)?0:colorNumber;
  colorNumber=(colorNumber>215)?215:colorNumber;
  i=parseInt(colorNumber/36);
  j=parseInt((colorNumber-i*36)/6);
  k=parseInt((colorNumber-i*36-j*6));
  var color="#"+colors[i]+colors[j]+colors[k];
  var style = new Object();
  style.fillColor = color;
  style.strokeColor = color;
  style.map = objRef.model.map;
  return style;
}
TimeSeriesOL.prototype.refreshLayer = function(objRef, layerName , newParams){
  newParams['version'] = Math.random(); //necessary for see change in certain case
  objRef.getLayer(objRef,layerName).mergeNewParams(newParams);
}
  
TimeSeriesOL.prototype.clearWidget2 = function(objRef) {
  if(objRef.model.map){
    objRef.model.map.destroy();
    outputNode =  document.getElementById( objRef.model.id+"Container_OpenLayers_ViewPort" );
    if(outputNode){
      objRef.node.removeChild(outputNode);
    }
    objRef.model.map=null;
    objRef.oLlayers = null;
  }
}
		
		
  
  TimeSeriesOL.prototype.timestampListener=function(objRef, timestampIndex){
	var layerName = objRef.model.timestampList.getAttribute("layerName");
    var timestamp = objRef.model.timestampList.childNodes[timestampIndex];
	if ((layerName) && (timestamp)) {		
		var curLayer = objRef.oLlayers[layerName];
		var oldImageUrl = curLayer.tile.imgDiv.src;
		var newImageUrl = oldImageUrl;		
		newImageUrl = newImageUrl.replace(/TIME\=.*?\&/,'TIME=' + timestamp.firstChild.nodeValue + '&');
		curLayer.tile.imgDiv.src = newImageUrl;
	}
			
  }
  
  
	
Documentation generated by 
JSDoc on Tue Aug 21 08:12:28 2007