MapPaneOL.js
Summary
No overview generated for 'MapPaneOL.js'
mapbuilder.loadScript(baseDir+"/util/openlayers/OpenLayers.js");
mapbuilder.loadScript(baseDir+"/util/Util.js");
mapbuilder.loadScript(baseDir+"/widget/WidgetBase.js");
mapbuilder.loadScript(baseDir+"/tool/Extent.js");
function MapPaneOL(widgetNode, model) {
WidgetBase.apply(this,new Array(widgetNode, model));
loadCss('openlayers/style.css');
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 ? parseInt(tileGutter.firstChild.nodeValue) : 0;
var tileBuffer = widgetNode.selectSingleNode("mb:tileBuffer");
this.tileBuffer = tileBuffer ? parseInt(tileBuffer.firstChild.nodeValue) : 2;
var tileSize = widgetNode.selectSingleNode("mb:tileSize");
this.tileSize = tileSize ? parseInt(tileSize.firstChild.nodeValue) : 256;
var imageReproject = widgetNode.selectSingleNode("mb:imageReproject");
this.imageReproject = imageReproject ? imageReproject.firstChild.nodeValue : 'false';
if (this.imageReproject.match(/true/i)) {
this.imageReproject = true;
} else {
this.imageReproject = false;
}
var imageBuffer = widgetNode.selectSingleNode("mb:imageBuffer");
this.imageBuffer = imageBuffer ? parseInt(imageBuffer.firstChild.nodeValue) : 2;
var displayOutsideMaxExtent = widgetNode.selectSingleNode("mb:displayOutsideMaxExtent");
this.displayOutsideMaxExtent = displayOutsideMaxExtent ? displayOutsideMaxExtent.firstChild.nodeValue : 'false';
if (this.displayOutsideMaxExtent.match(/true/i)) {
this.displayOutsideMaxExtent = true;
} else {
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);
}
MapPaneOL.prototype.paint = function(objRef, refresh) {
if (objRef.model.buttonBars && objRef.model.map) {
for (var i in objRef.model.buttonBars) {
objRef.model.map.removeControl(objRef.model.buttonBars[i]);
}
objRef.model.buttonBars = new Array();
}
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) ? parseFloat(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;
for (var r in resolutions) {
resolutions[r] = parseFloat(resolutions[r]);
}
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: null // we have the theme loaded by Mapbuilder
};
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]));
}
}
MapPaneOL.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);
}
}
MapPaneOL.prototype.updateMouse = function(e) {
var objRef = e.object.mbMapPane;
if (objRef.model.map.mbCursor) {
objRef.model.map.div.style.cursor = objRef.model.map.mbCursor;
}
}
MapPaneOL.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);
}
MapPaneOL.prototype.getLayer = function(objRef,layerName) {
return objRef.model.map.getLayer(objRef.oLlayers[layerName].id);
}
MapPaneOL.prototype.deleteLayer = function(objRef, layerName) {
if(objRef.oLlayers[layerName])objRef.model.map.removeLayer(objRef.oLlayers[layerName]);
}
MapPaneOL.prototype.deleteAllLayers = function(objRef) {
objRef.model.map.destroy();
}
MapPaneOL.prototype.moveLayerUp = function(objRef, layerName) {
var map=objRef.model.map;
map.raiseLayer(map.getLayer(objRef.oLlayers[layerName].id), 1);
}
MapPaneOL.prototype.moveLayerDown = function(objRef, layerName) {
objRef.model.map.raiseLayer(objRef.getLayer(objRef,layerName), -1);
}
MapPaneOL.prototype.setOpacity=function(objRef, layerName){
var _opacity="1";
_opacity=objRef.model.getOpacity(layerName);
objRef.getLayer(objRef,layerName).setOpacity(_opacity);
}
MapPaneOL.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)?getNodeValue(href):"";
}
else {
if(_SARISSA_IS_SAFARI){
var nodehref=layer.selectSingleNode("wmc:Server/wmc:OnlineResource");
var href=nodehref.attributes[1].nodeValue;
}
else{
if(_SARISSA_IS_OPERA){
var href=layer.selectSingleNode("wmc:Server/wmc:OnlineResource").getAttributeNS ("http://www.w3.org/1999/xlink","href");// for opera
}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 layerOptions = {
visibility: vis,
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;
layerOptions.singleTile = true;
var params = new Array();
params = sld2UrlParam(currentStyle);
if (objRef.model.timestampList && objRef.model.timestampList.getAttribute("layerName") == name2) {
var timestamp = objRef.model.timestampList.childNodes[0];
objRef.oLlayers[name2]= new OpenLayers.Layer.WMS(title,href,{
layers: name2,
transparent: layerOptions.isBaseLayer ? "FALSE" : "TRUE",
"TIME":timestamp.firstChild.nodeValue,
format: format,
sld:params.sld,
sld_body:params.sld_body,
styles:params.styles
},
layerOptions
);
this.model.addListener("timestamp",this.timestampListener,this);
}
else {
objRef.oLlayers[name2]= new OpenLayers.Layer.WMS(title,href,{
layers: name2,
transparent: layerOptions.isBaseLayer ? "FALSE" : "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: layerOptions.isBaseLayer ? "FALSE" : "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]);
}
MapPaneOL.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;
}
MapPaneOL.prototype.refreshLayer = function(objRef, layerName , newParams){
newParams['version'] = Math.random(); //necessary for see change in certain case
objRef.getLayer(objRef,layerName).mergeNewParams(newParams);
}
MapPaneOL.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;
}
}
MapPaneOL.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.grid[0][0].imgDiv.src;
var newImageUrl = oldImageUrl;
newImageUrl = newImageUrl.replace(/TIME\=.*?\&/,'TIME=' + timestamp.firstChild.nodeValue + '&');
function imageLoaded() {
window.movieLoop.frameIsLoading = false;
}
window.movieLoop.frameIsLoading = true;
var element = curLayer.grid[0][0].imgDiv;
if(element.addEventListener) { // Standard
element.addEventListener("load", imageLoaded, false);
} else if(element.attachEvent) { // IE
element.attachEvent('onload', imageLoaded);
}
element.src = newImageUrl;
}
}
Documentation generated by
JSDoc on Tue Aug 21 08:12:28 2007