QuickWMS-Extension/WMStools.js: Unterschied zwischen den Versionen

GISWiki - Das freie Portal für Geoinformatik (GIS)
Wechseln zu: Navigation, Suche
 
 
Zeile 1: Zeile 1:
<pre>/*
+
<pre>
 +
 
 +
/*
 
* Project quickWMS: Generic JavaScript WMS Client  
 
* Project quickWMS: Generic JavaScript WMS Client  
 
* File : WMStools.js
 
* File : WMStools.js
Zeile 13: Zeile 15:
 
* License : OpenSource (check license.txt in the same directory)
 
* License : OpenSource (check license.txt in the same directory)
 
* History :
 
* History :
    2003-10-24 : When in select mode clicking again in the selection button will disable the tool and hide the selection layer
+
  2003-10-24 : When in select mode clicking again in the selection button will disable the tool and hide the selection layer
  2003-04-23 : Documentation added
+
2003-04-23 : Documentation added
 
     2003-03-20 : File Created
 
     2003-03-20 : File Created
 
* Objects :  
 
* Objects :  
Zeile 22: Zeile 24:
  
 
function toolBar(obRefName){
 
function toolBar(obRefName){
  //obRefName.toolBar=this;
+
//obRefName.toolBar=this;
  this.map=obRefName;
+
this.map=obRefName;
  this.images = new Array ('back.gif', 'forward.gif', 'home.gif', 'zsel.gif', 'zminus.gif', 'select.gif');
+
this.images = new Array ('back.gif', 'forward.gif', 'home.gif', 'zsel.gif', 'zminus.gif', 'select.gif');
  this.help = new Array ('back to previous view', 'jump to next view', 'go to first to home view','select area to zoom', 'zoom out', 'select tool');
+
this.help = new Array ('back to previous view', 'jump to next view', 'go to first to home view','select area to zoom', 'zoom out', 'select tool');
  this.events = new Array;
+
this.events = new Array;
  this.events[0]= function (map) {map.back();}
+
this.events[0]= function (map) {map.back();}
  this.events[1]= function (map) {map.forward();}
+
this.events[1]= function (map) {map.forward();}
  this.events[2]= function (map) {map.home();}
+
this.events[2]= function (map) {map.home();}
  this.events[3]= function (map) {map.toolMode='selzoom';map.toolbar.reset();map.toolbar.imgs[3].src=path_skin+'h_'+map.toolbar.images[3]}                        
+
this.events[3]= function (map) {map.toolMode='selzoom';map.toolbar.reset();map.toolbar.imgs[3].src=path_skin+'h_'+map.toolbar.images[3]}
  this.events[4]= function (map) {map.toolMode='zoomout';map.toolbar.reset();map.toolbar.imgs[4].src=path_skin+'h_'+map.toolbar.images[4]}
+
this.events[4]= function (map) {map.toolMode='zoomout';map.toolbar.reset();map.toolbar.imgs[4].src=path_skin+'h_'+map.toolbar.images[4]}
  this.events[5]= function (map) {if (map.toolMode=='selection') {
+
this.events[5]= function (map) {if (map.toolMode=='selection') {
                                map.toolMode='';
+
map.toolMode='';
                                hideLayer(map.name+"Selection");
+
hideLayer(map.name+"Selection");
                                map.toolbar.reset();
+
map.toolbar.reset();
                                }
+
}
                            else {map.toolMode='selection';map.toolbar.reset();map.toolbar.imgs[5].src=path_skin+'h_'+map.toolbar.images[5]}
+
else {map.toolMode='selection';map.toolbar.reset();map.toolbar.imgs[5].src=path_skin+'h_'+map.toolbar.images[5]}
                            }
+
}
 
+
  this.reset = function () {
+
this.reset = function () {
      for(i=0; i<this.images.length; i++){
+
for(i=0; i<this.images.length; i++){
        this.imgs[i].src=path_skin+this.images[i];
+
this.imgs[i].src=path_skin+this.images[i];
      }
+
}
    }
+
}
 
+
  this.writeDOM = function ( x, y, horiz) {
+
this.writeDOM = function ( x, y, horiz) {
      var content="";
+
var content="";
      if (browser.isOldNS){var style=""}
+
if (browser.isOldNS){var style=""}
      else {var style=" style='cursor:pointer;cursor:hand'"}
+
else {var style=" style='cursor:pointer;cursor:hand'"}
      for(i=0; i<this.images.length; i++){
+
for(i=0; i<this.images.length; i++){
        content+="<img src='"+path_skin+this.images[i]+"'"+style+" width=24 height=24 border=0 alt='"+this.help[i]+"' onmouseup=getLayer('"+this.map.name+"ToolBar').reference.events["+i+"](getLayer('"+this.map.name+"ToolBar').reference.map)>";      
+
content+="<img src='"+path_skin+this.images[i]+"'"+style+" width=24 height=24 border=0 alt='"+this.help[i]+"' onmouseup=getLayer('"+this.map.name+"ToolBar').reference.events["+i+"](getLayer('"+this.map.name+"ToolBar').reference.map)>";
      }    
+
}
      openLayer(this.map.name+"ToolBar","","", x, y, 25*this.images.length, 25, true);
+
openLayerR(this.map.name+"ToolBar","","", x, y, 25*this.images.length, 25, true);
      document.write(content);
+
document.write(content);
      closeLayer();
+
closeLayer();
     
+
      // 2003-10-24 : Note .. for the tools to be compatible with ns47 we should make a special case for it because it doesn't works with getElementXXX methods  
+
// 2003-10-24 : Note .. for the tools to be compatible with ns47 we should make a special case for it because it doesn't works with getElementXXX methods  
      if (browser.isNS47x) {
+
if (browser.isNS47x) {
        getLayer(this.map.name+"ToolBar").reference=this;
+
getLayer(this.map.name+"ToolBar").reference=this;
        this.imgs=getLayer(this.map.name+"ToolBar").document.images;          
+
this.imgs=getLayer(this.map.name+"ToolBar").document.images;
      }
+
}
      else {
+
else {
        //getLayer(this.map.name+"ToolBar").reference=this;  
+
//getLayer(this.map.name+"ToolBar").reference=this;
        //this.imgs=getLayer(this.map.name+"ToolBar").getElementsByTagName("img");          
+
//this.imgs=getLayer(this.map.name+"ToolBar").getElementsByTagName("img");
        // 2003-10-13 : changed this because of ns71      
+
// 2003-10-13 : changed this because of ns71
        document.getElementById(this.map.name+"ToolBar").reference=this;          
+
document.getElementById(this.map.name+"ToolBar").reference=this;
        this.imgs=document.getElementById(this.map.name+"ToolBar").getElementsByTagName("img");    
+
this.imgs=document.getElementById(this.map.name+"ToolBar").getElementsByTagName("img");
      }
+
}
     
+
    }
+
}
 
}
 
}
  
Zeile 77: Zeile 79:
 
{
 
{
  
  var mouseX;
+
var mouseX;
  var mouseY;
+
var mouseY;
  if (browser.isIE50 || browser.isIE55 || browser.isIE60){e = window.event;}
+
if (browser.isIE50 || browser.isIE55 || browser.isIE60){e = window.event;}
 
+
  
  if (e.layerX)
+
if (e.layerX)
  {
+
{
    mouseX =e.layerX;
+
mouseX =e.layerX;
    mouseY =e.layerY;
+
mouseY =e.layerY;
  }
+
}
  else
+
else
  if (browser.isOldNS)
+
if (browser.isOldNS)
    {
+
  {
    mouseX=e.pageX;
+
mouseX=e.pageX;
    mouseY=e.pageY;
+
mouseY=e.pageY;
  }
+
}
 
   else
 
   else
 
   {
 
   {
    mouseX=e.clientX;
+
mouseX=e.clientX;
    mouseY=e.clientY;
+
mouseY=e.clientY;
      mouseX=e.offsetX;
+
  mouseX=e.offsetX;
    mouseY=e.offsetY;  
+
mouseY=e.offsetY;
  }
+
}
    mouseX++;
+
  mouseX++;
  mouseY++;
+
mouseY++;
 
+
  mouseX=Math.round(mouseX/mouseGrid)*mouseGrid;
+
mouseX=Math.round(mouseX/mouseGrid)*mouseGrid;
  mouseY=Math.round(mouseY/mouseGrid)*mouseGrid;
+
mouseY=Math.round(mouseY/mouseGrid)*mouseGrid;
 
+
  if (e.target){
+
if (e.target){
    if (e.target.parent) return new layerPoint(e.target.parent,mouseX,mouseY);
+
if (e.target.parent) return new layerPoint(e.target.parent,mouseX,mouseY);
    }
+
}
  else{
+
else{
    if (e.srcElement){
+
if (e.srcElement){
      if (e.srcElement.parentElement){
+
if (e.srcElement.parentElement){
        if (e.srcElement.parentElement.reference){
+
if (e.srcElement.parentElement.reference){
          return new layerPoint(e.srcElement.parentElement.reference,mouseX,mouseY)
+
return new layerPoint(e.srcElement.parentElement.reference,mouseX,mouseY)
          }
+
}
        }
+
}
      }
+
}
    else if (e.currentTarget) return new layerPoint(e.currentTarget.reference,mouseX,mouseY);
+
else if (e.currentTarget) return new layerPoint(e.currentTarget.reference,mouseX,mouseY);
   
+
    }
+
}
  
 
}
 
}
Zeile 125: Zeile 127:
  
  
function WMS_zoomTool(obRef, eventType, X, Y){
+
function WMS_zoomTool(obRef, eventType, X, Y){
  if (eventType=="mouseMove" && obRef.toolMode=="zooming"){
+
if (eventType=="mouseMove" && obRef.toolMode=="zooming"){
    showLayer(obRef.name+"zoom");
+
showLayer(obRef.name+"zoom");
    obRef.setZoomBox(null,null,X,Y);
+
obRef.setZoomBox(null,null,X,Y);
    return true;
+
return true;
    }
+
}
  else
+
else
  if (eventType=="mouseMove" && obRef.toolMode=="selecting"){
+
if (eventType=="mouseMove" && obRef.toolMode=="selecting"){
    showLayer(obRef.name+"Selection");  
+
showLayer(obRef.name+"Selection");
    if (obRef.onSelecting){
+
if (obRef.onSelecting){
        var tX2=mouse2GeoX(obRef,X);
+
var tX2=mouse2GeoX(obRef,X);
        var tY1=mouse2GeoY(obRef,Y);
+
var tY1=mouse2GeoY(obRef,Y);
        var tX1=obRef.slBox[0];
+
var tX1=obRef.slBox[0];
        var tY2=obRef.slBox[3];
+
var tY2=obRef.slBox[3];
        if (tX2<obRef.slBox[0]){
+
if (tX2<obRef.slBox[0]){
          tX1=tX2;
+
tX1=tX2;
          tX2=obRef.slBox[0];
+
tX2=obRef.slBox[0];
          }
+
}
        /*if (tY2<obRef.slBox[1]){
+
/*if (tY2<obRef.slBox[1]){
          tY1=tY2;
+
tY1=tY2;
          tY2=obRef.slBox[1];
+
tY2=obRef.slBox[1];
          }                
+
}
          */
+
*/
        if (obRef.onSelecting(obRef,tX1,tY1,tX2,tY2)){
+
if (obRef.onSelecting(obRef,tX1,tY1,tX2,tY2)){
          obRef.setSelection(null,null,X,Y);
+
obRef.setSelection(null,null,X,Y);
        }
+
}
      }
+
}
    else{
+
else{
      obRef.setSelection(null,null,X,Y);
+
obRef.setSelection(null,null,X,Y);
    }
+
}
           
+
    return true;
+
return true;
    }
+
}
  else
+
else
  if (eventType=="mouseDown") {  
+
if (eventType=="mouseDown") {
    if (obRef.toolMode=="selzoom"){
+
if (obRef.toolMode=="selzoom"){
      if(obRef.setZoomBox){
+
if(obRef.setZoomBox){
        if (obRef.toolMode=="zooming"){
+
if (obRef.toolMode=="zooming"){
          obRef.setZoomBox(null,null,X,Y);
+
obRef.setZoomBox(null,null,X,Y);
          }
+
}
        else{
+
else{
          obRef.setZoomBox(X,Y,X,Y);
+
obRef.setZoomBox(X,Y,X,Y);
          obRef.toolMode="zooming";
+
obRef.toolMode="zooming";
          //showLayer(obRef.name+"Selection");
+
//showLayer(obRef.name+"Selection");
          }      
+
}
        }
+
}
      }  
+
}
    if (obRef.toolMode=="selection"){  
+
if (obRef.toolMode=="selection"){
      if(obRef.setSelection){
+
if(obRef.setSelection){
        if (obRef.toolMode=="selecting"){
+
if (obRef.toolMode=="selecting"){
          obRef.setSelection(null,null,X,Y);
+
obRef.setSelection(null,null,X,Y);
          }
+
}
        else{
+
else{
          obRef.setSelection(X,Y,X,Y);
+
obRef.setSelection(X,Y,X,Y);
          obRef.toolMode="selecting";
+
obRef.toolMode="selecting";
          //showLayer(obRef.name+"Selection");
+
//showLayer(obRef.name+"Selection");
          }      
+
}
        }      
+
}
      if (obRef.onSelecting){obRef.onSelecting(obRef,X,Y,X,Y)}                    
+
if (obRef.onSelecting){obRef.onSelecting(obRef,X,Y,X,Y)}
      }
+
}
     
+
   
+
    return true
+
return true
    }
+
}
  else
+
else
  if (eventType=="mouseUp") {
+
if (eventType=="mouseUp") {
    if (obRef.toolMode=="zooming"){
+
if (obRef.toolMode=="zooming"){
      if(obRef.setZoomBox){
+
if(obRef.setZoomBox){
        if (isVisible(obRef.name+"zoom")){  
+
if (isVisible(obRef.name+"zoom")){  
          obRef.setZoomBox(null,null,X,Y);
+
obRef.setZoomBox(null,null,X,Y);
          if (  X-geo2MouseX(obRef,obRef.zBox[0])<5 && Y-geo2MouseY(obRef,obRef.zBox[1])<5) {
+
if (  X-geo2MouseX(obRef,obRef.zBox[0])<5 && Y-geo2MouseY(obRef,obRef.zBox[1])<5) {
            obRef.zoomTo(mouse2GeoX(obRef,X),mouse2GeoY(obRef,Y),2);
+
obRef.zoomTo(mouse2GeoX(obRef,X),mouse2GeoY(obRef,Y),2);
            }
+
}
          else obRef.updateBBox( obRef.zBox[0], obRef.zBox[1],obRef.zBox[2],obRef.zBox[3]);
+
else obRef.updateBBox( obRef.zBox[0], obRef.zBox[1],obRef.zBox[2],obRef.zBox[3]);
          hideLayer(obRef.name+"zoom");
+
hideLayer(obRef.name+"zoom");
          }
+
}
        else{
+
else{
          obRef.zoomTo(mouse2GeoX(obRef,X),mouse2GeoY(obRef,Y),2);
+
obRef.zoomTo(mouse2GeoX(obRef,X),mouse2GeoY(obRef,Y),2);
          hideLayer(obRef.name+"zoom");
+
hideLayer(obRef.name+"zoom");
          }
+
}
        }
+
}
      else{
+
else{
           
+
        }    
+
}
      obRef.toolMode="selzoom";
+
obRef.toolMode="selzoom";
      return true;
+
return true;
      }
+
}
    if (obRef.toolMode=="zoomout"){
+
if (obRef.toolMode=="zoomout"){
      obRef.zoomTo(mouse2GeoX(obRef,X),mouse2GeoY(obRef,Y),0.5);
+
obRef.zoomTo(mouse2GeoX(obRef,X),mouse2GeoY(obRef,Y),0.5);
      return true;
+
return true;
      }
+
}
    if (obRef.toolMode=="selecting"){
+
if (obRef.toolMode=="selecting"){
      obRef.toolMode="selection";      
+
obRef.toolMode="selection";
      if (obRef.onSelection){obRef.onSelection(obRef,obRef.slBox[0],obRef.slBox[1],obRef.slBox[2],obRef.slBox[3])}
+
if (obRef.onSelection){obRef.onSelection(obRef,obRef.slBox[0],obRef.slBox[1],obRef.slBox[2],obRef.slBox[3])}
      return true;
+
return true;
      }
+
}
     
+
    }  
+
}
  else
+
else
    return false
+
return false
  }
+
}
  
function WMS_mouseToolManager(eventType, X, Y){
+
function WMS_mouseToolManager(eventType, X, Y){
  if (true)//(this.toolMode=="selzoom" || this.toolMode=="zooming" || this.toolMode=="zoomout")
+
if (true)//(this.toolMode=="selzoom" || this.toolMode=="zooming" || this.toolMode=="zoomout")
    {return WMS_zoomTool(this,eventType, X, Y);}
+
{return WMS_zoomTool(this,eventType, X, Y);}
  else
+
else
    return false;
+
return false;
  }
+
}
  
 
function WMS_mouseUp(e){
 
function WMS_mouseUp(e){
  mouse=getMouseXY(e);
+
mouse=getMouseXY(e);
 
+
  if (mouse){
+
if (mouse){
    if (!mouse.layer.mouseToolManager("mouseUp",mouse.X,mouse.Y)){
+
if (!mouse.layer.mouseToolManager("mouseUp",mouse.X,mouse.Y)){
      if (mouse.layer.onMouseUp)
+
if (mouse.layer.onMouseUp)
        {mouse.layer.onMouseUp(mouse.layer, mouse.X,mouse.Y);}
+
{mouse.layer.onMouseUp(mouse.layer, mouse.X,mouse.Y);}
      }
+
}
    }
+
}
  // Returning true on a mouse event insures that window.status will not be
+
// Returning true on a mouse event insures that window.status will not be
  //  overwritten (browser convention)
+
//  overwritten (browser convention)
  return false;
+
return false;
  }
+
}
 
function WMS_mouseDown(e){
 
function WMS_mouseDown(e){
  mouse=getMouseXY(e);
+
mouse=getMouseXY(e);
  //window.status+=mouse.X;
+
//window.status+=mouse.X;
  if (mouse){
+
if (mouse){
    if (!mouse.layer.mouseToolManager("mouseDown",mouse.X,mouse.Y)){
+
if (!mouse.layer.mouseToolManager("mouseDown",mouse.X,mouse.Y)){
      if (mouse.layer.onMouseUp){
+
if (mouse.layer.onMouseUp){
        mouse.layer.onMouseUp(mouse.layer, mouse.X,mouse.Y);
+
mouse.layer.onMouseUp(mouse.layer, mouse.X,mouse.Y);
        }
+
}
      }
+
}
    }  
+
}
  // Returning true on a mouse event insures that window.status will not be
+
// Returning true on a mouse event insures that window.status will not be
  //  overwritten (browser convention)
+
//  overwritten (browser convention)
  stopEventPropagation(e);
+
stopEventPropagation(e);
  //return false;
+
//return false;
    return true;
+
  return true;
  }
+
}
  
 
function WMS_mouseMove(e){
 
function WMS_mouseMove(e){
  if (getMouseXY){
+
if (getMouseXY){
      mouse=getMouseXY(e);
+
mouse=getMouseXY(e);
  if (mouse){
+
if (mouse){
    if (!mouse.layer.mouseToolManager("mouseMove",mouse.X,mouse.Y)){  
+
if (!mouse.layer.mouseToolManager("mouseMove",mouse.X,mouse.Y)){
      if (mouse.layer.onMouseMove){
+
if (mouse.layer.onMouseMove){
        mouse.layer.onMouseMove(mouse.layer,mouse2GeoX(mouse.layer,mouse.X),mouse2GeoY(mouse.layer,mouse.Y));
+
mouse.layer.onMouseMove(mouse.layer,mouse2GeoX(mouse.layer,mouse.X),mouse2GeoY(mouse.layer,mouse.Y));
        }
+
}
      }
+
}
    }
+
}
  stopEventPropagation(e);
+
stopEventPropagation(e);
  return false;//true;
+
return false;//true;
    }
+
}
  }
+
}
  
 
function changeBBox(obRef,value)
 
function changeBBox(obRef,value)
 
{
 
{
  if (value!=-1)
+
if (value!=-1)
  {
+
{
    var box=value.split(',');
+
var box=value.split(',');
    obRef.updateBBox (box[0],box[1],box[2],box[3]);
+
obRef.updateBBox (box[0],box[1],box[2],box[3]);
  }
+
}
 
}
 
}
  
Zeile 291: Zeile 293:
 
function changeSelectBBox(obRef,value)
 
function changeSelectBBox(obRef,value)
 
{
 
{
  if (value!=-1)
+
if (value!=-1)
  {
+
{
    var box=value.split(',');
+
var box=value.split(',');
    showLayer(obRef.name+"Selection");
+
showLayer(obRef.name+"Selection");
   
+
    obRef.updateBBox ( (box[0]/1)-20.0, (box[1]/1)-20.0, (box[2]/1)+20.0, (box[3]/1)+20.0);
+
obRef.updateBBox ( (box[0]/1)-20.0, (box[1]/1)-20.0, (box[2]/1)+20.0, (box[3]/1)+20.0);
//   obRef.updateBBox ( 30-2, 40-2, 60+2, 50+2);
+
// obRef.updateBBox ( 30-2, 40-2, 60+2, 50+2);
    obRef.setSelectionXY (box[0],box[1],box[2],box[3]);
+
obRef.setSelectionXY (box[0],box[1],box[2],box[3]);
  }
+
}
 
}
 
}
  
Zeile 307: Zeile 309:
  
 
function writeNavArrows(x,y, obRef){
 
function writeNavArrows(x,y, obRef){
  openLayer(obRef.name+"Arrows","","filter:alpha(opacity=80);-moz-opacity:0.80;border-style:solid;border-width:1;background-color:white;", x, y, 64,67, true);
+
openLayer(obRef.name+"Arrows","","filter:alpha(opacity=80);-moz-opacity:0.80;border-style:solid;border-width:1;background-color:white;", x, y, 64,67, true);
 
+
  document.write("<img onclick=moveBy('"+obRef.name+"') style='position:absolute;top:5;left:5' src='"+path_IMG+"nw.gif' width=24 height=24 border=0 alt=''>");
+
document.write("<img onclick=moveBy('"+obRef.name+"') style='position:absolute;top:5;left:5' src='"+path_IMG+"nw.gif' width=24 height=24 border=0 alt=''>");
  document.write("<img onclick=moveBy('"+obRef.name+"') style='position:absolute;top:2;left:20' src='"+path_IMG+"n.gif' width=24 height=24 border=0 alt=''>");
+
document.write("<img onclick=moveBy('"+obRef.name+"') style='position:absolute;top:2;left:20' src='"+path_IMG+"n.gif' width=24 height=24 border=0 alt=''>");
  document.write("<img onclick=moveBy('"+obRef.name+"') style='position:absolute;top:5;left:35' src='"+path_IMG+"ne.gif' width=24 height=24 border=0 alt=''>");
+
document.write("<img onclick=moveBy('"+obRef.name+"') style='position:absolute;top:5;left:35' src='"+path_IMG+"ne.gif' width=24 height=24 border=0 alt=''>");
  
  document.write("<img onclick=moveBy('"+obRef.name+"') style='position:absolute;top:21;left:5' src='"+path_IMG+"w.gif' width=24 height=24 border=0 alt=''>");
+
document.write("<img onclick=moveBy('"+obRef.name+"') style='position:absolute;top:21;left:5' src='"+path_IMG+"w.gif' width=24 height=24 border=0 alt=''>");
  document.write("<img onclick=moveBy('"+obRef.name+"') style='position:absolute;top:21;left:37' src='"+path_IMG+"e.gif' width=24 height=24 border=0 alt=''>");
+
document.write("<img onclick=moveBy('"+obRef.name+"') style='position:absolute;top:21;left:37' src='"+path_IMG+"e.gif' width=24 height=24 border=0 alt=''>");
 +
 
 +
document.write("<img onclick=moveBy('"+obRef.name+"') style='position:absolute;top:38;left:5' src='"+path_IMG+"sw.gif' width=24 height=24 border=0 alt=''>");
 +
document.write("<img onclick=moveBy('"+obRef.name+"') style='position:absolute;top:41;left:20' src='"+path_IMG+"s.gif' width=24 height=24 border=0 alt=''>");
 +
document.write("<img onclick=moveBy('"+obRef.name+"') style='position:absolute;top:38;left:35' src='"+path_IMG+"se.gif' width=24 height=24 border=0 alt=''>");
 +
}
 +
*/
  
  document.write("<img onclick=moveBy('"+obRef.name+"') style='position:absolute;top:38;left:5' src='"+path_IMG+"sw.gif' width=24 height=24 border=0 alt=''>");
+
</pre>
  document.write("<img onclick=moveBy('"+obRef.name+"') style='position:absolute;top:41;left:20' src='"+path_IMG+"s.gif' width=24 height=24 border=0 alt=''>");
+
  document.write("<img onclick=moveBy('"+obRef.name+"') style='position:absolute;top:38;left:35' src='"+path_IMG+"se.gif' width=24 height=24 border=0 alt=''>");
+
  }
+
*/</pre>
+

Aktuelle Version vom 19. August 2005, 20:14 Uhr


/*
* Project quickWMS: Generic JavaScript WMS Client 
* File : WMStools.js
* Author : Pedro Pereira Gonçalves
* email : pedro.goncalves@esa.int or pedro@inovagis.org
* Version : 0.1
* Description: Deals with mouse functions and basic WMS tools and toolbars
*                     Please read coderules.txt before making any change
* Tested on : Netscape 7.0, IE 5.5, IE 6.0
* Last Change : 2003-10-24
* Dependencies : WMSbrowsers.js
* Future Developments : Pan buttons (left, right .. and so on )
* License : OpenSource (check license.txt in the same directory)
* History :
   	2003-10-24 : When in select mode clicking again in the selection button will disable the tool and hide the selection layer
	2003-04-23 : Documentation added
    2003-03-20 : File Created
* Objects : 
* Functions : 
*/


function toolBar(obRefName){
	//obRefName.toolBar=this;
	this.map=obRefName;
	this.images = new Array ('back.gif', 'forward.gif', 'home.gif', 'zsel.gif', 'zminus.gif', 'select.gif');
	this.help = new Array ('back to previous view', 'jump to next view', 'go to first to home view','select area to zoom', 'zoom out', 'select tool');	
	this.events = new Array;	
	this.events[0]= function (map) {map.back();}
	this.events[1]= function (map) {map.forward();}
	this.events[2]= function (map) {map.home();}
	this.events[3]= function (map) {map.toolMode='selzoom';map.toolbar.reset();map.toolbar.imgs[3].src=path_skin+'h_'+map.toolbar.images[3]}													
	this.events[4]= function (map) {map.toolMode='zoomout';map.toolbar.reset();map.toolbar.imgs[4].src=path_skin+'h_'+map.toolbar.images[4]}	
	this.events[5]= function (map) {if (map.toolMode=='selection') {
																map.toolMode='';
																hideLayer(map.name+"Selection");	
																map.toolbar.reset();
																}
														else	{map.toolMode='selection';map.toolbar.reset();map.toolbar.imgs[5].src=path_skin+'h_'+map.toolbar.images[5]}	
														}
	
	this.reset = function () {
			for(i=0; i<this.images.length; i++){	
				this.imgs[i].src=path_skin+this.images[i];
			}
		}
	
	this.writeDOM = function ( x, y, horiz)	{
			var content="";
			if (browser.isOldNS){var style=""}
			else {var style=" style='cursor:pointer;cursor:hand'"}
			for(i=0; i<this.images.length; i++){
				content+="<img src='"+path_skin+this.images[i]+"'"+style+" width=24 height=24 border=0 alt='"+this.help[i]+"' onmouseup=getLayer('"+this.map.name+"ToolBar').reference.events["+i+"](getLayer('"+this.map.name+"ToolBar').reference.map)>";				
			}			
			openLayerR(this.map.name+"ToolBar","","", x, y, 25*this.images.length, 25, true);
			document.write(content);	
			closeLayer();
			
			// 2003-10-24 : Note .. for the tools to be compatible with ns47 we should make a special case for it because it doesn't works with getElementXXX methods 
			if (browser.isNS47x)	{
				getLayer(this.map.name+"ToolBar").reference=this;	
				this.imgs=getLayer(this.map.name+"ToolBar").document.images;						
			}
			else {
				//getLayer(this.map.name+"ToolBar").reference=this;		
				//this.imgs=getLayer(this.map.name+"ToolBar").getElementsByTagName("img");						
				// 2003-10-13 : changed this because of ns71 			
				document.getElementById(this.map.name+"ToolBar").reference=this;						
				this.imgs=document.getElementById(this.map.name+"ToolBar").getElementsByTagName("img");			
			}
			
		}
}


function getMouseXY(e)
{

	var mouseX;
	var mouseY;
	if (browser.isIE50 || browser.isIE55 || browser.isIE60){e = window.event;}
	

	if (e.layerX)
	{
		mouseX =e.layerX;
		mouseY =e.layerY;
	}
	else
	if (browser.isOldNS)
  	{
		mouseX=e.pageX;
		mouseY=e.pageY;
	}
  else
  {
		mouseX=e.clientX;
		mouseY=e.clientY;
  		mouseX=e.offsetX;
		mouseY=e.offsetY;		
	}
  	mouseX++;
	mouseY++;
	
	mouseX=Math.round(mouseX/mouseGrid)*mouseGrid;
	mouseY=Math.round(mouseY/mouseGrid)*mouseGrid;
	
	if (e.target){
		if (e.target.parent) return new layerPoint(e.target.parent,mouseX,mouseY);	
		}
	else{
		if (e.srcElement){
			if (e.srcElement.parentElement){
				if (e.srcElement.parentElement.reference){
					return new layerPoint(e.srcElement.parentElement.reference,mouseX,mouseY)
					}
				}
			}
		else if (e.currentTarget) return new layerPoint(e.currentTarget.reference,mouseX,mouseY);
		
		}

}



function WMS_zoomTool(obRef, eventType, X, Y){	
	if (eventType=="mouseMove" && obRef.toolMode=="zooming"){
		showLayer(obRef.name+"zoom");
		obRef.setZoomBox(null,null,X,Y);	
		return true;
		}
	else
	if (eventType=="mouseMove" && obRef.toolMode=="selecting"){
		showLayer(obRef.name+"Selection");		
		if (obRef.onSelecting){
				var tX2=mouse2GeoX(obRef,X);
				var tY1=mouse2GeoY(obRef,Y);
				var tX1=obRef.slBox[0];
				var tY2=obRef.slBox[3];
				if (tX2<obRef.slBox[0]){
					tX1=tX2;
					tX2=obRef.slBox[0];
					}
				/*if (tY2<obRef.slBox[1]){
					tY1=tY2;
					tY2=obRef.slBox[1];
					}									
					*/
				if (obRef.onSelecting(obRef,tX1,tY1,tX2,tY2)){
					obRef.setSelection(null,null,X,Y);	
				}
			}	
		else{
			obRef.setSelection(null,null,X,Y);	
		}
						
		return true;
		}
	else
	if (eventType=="mouseDown") {		
		if (obRef.toolMode=="selzoom"){
			if(obRef.setZoomBox){
				if (obRef.toolMode=="zooming"){
					obRef.setZoomBox(null,null,X,Y);
					}	
				else{
					obRef.setZoomBox(X,Y,X,Y);
					obRef.toolMode="zooming";
					//showLayer(obRef.name+"Selection");
					}				
				}
			}		
		if (obRef.toolMode=="selection"){		
			if(obRef.setSelection){
				if (obRef.toolMode=="selecting"){
					obRef.setSelection(null,null,X,Y);
					}	
				else{
					obRef.setSelection(X,Y,X,Y);
					obRef.toolMode="selecting";
					//showLayer(obRef.name+"Selection");
					}				
				}				
			if (obRef.onSelecting){obRef.onSelecting(obRef,X,Y,X,Y)}											
			}
			
		
		return true
		}
	else
	if (eventType=="mouseUp") {
		if (obRef.toolMode=="zooming"){
			if(obRef.setZoomBox){
				if (isVisible(obRef.name+"zoom")){ 
					obRef.setZoomBox(null,null,X,Y);
					if (  X-geo2MouseX(obRef,obRef.zBox[0])<5 && Y-geo2MouseY(obRef,obRef.zBox[1])<5) {
						obRef.zoomTo(mouse2GeoX(obRef,X),mouse2GeoY(obRef,Y),2);
						}
					else obRef.updateBBox( obRef.zBox[0], obRef.zBox[1],obRef.zBox[2],obRef.zBox[3]);
					hideLayer(obRef.name+"zoom");	
					}
				else{
					obRef.zoomTo(mouse2GeoX(obRef,X),mouse2GeoY(obRef,Y),2);
					hideLayer(obRef.name+"zoom");	
					}
				}
			else{
						
				}			
			obRef.toolMode="selzoom";
			return true;
			}
		if (obRef.toolMode=="zoomout"){
			obRef.zoomTo(mouse2GeoX(obRef,X),mouse2GeoY(obRef,Y),0.5);
			return true;
			}
		if (obRef.toolMode=="selecting"){
			obRef.toolMode="selection";				
			if (obRef.onSelection){obRef.onSelection(obRef,obRef.slBox[0],obRef.slBox[1],obRef.slBox[2],obRef.slBox[3])}
			return true;
			}
			
		}		
	else
		return false
	}

function WMS_mouseToolManager(eventType, X, Y){	
	if (true)//(this.toolMode=="selzoom" || this.toolMode=="zooming" || this.toolMode=="zoomout")
		{return WMS_zoomTool(this,eventType, X, Y);}	
	else	
		return false;
	}

function WMS_mouseUp(e){
	mouse=getMouseXY(e);
	
	if (mouse){
		if (!mouse.layer.mouseToolManager("mouseUp",mouse.X,mouse.Y)){
			if (mouse.layer.onMouseUp)
				{mouse.layer.onMouseUp(mouse.layer, mouse.X,mouse.Y);}
			}
		}
	// Returning true on a mouse event insures that window.status will not be
	//   overwritten (browser convention)
	return false;
	}
function WMS_mouseDown(e){
	mouse=getMouseXY(e);
	//window.status+=mouse.X;
	if (mouse){
		if (!mouse.layer.mouseToolManager("mouseDown",mouse.X,mouse.Y)){
			if (mouse.layer.onMouseUp){
				mouse.layer.onMouseUp(mouse.layer, mouse.X,mouse.Y);
				}
			}
		}		
	// Returning true on a mouse event insures that window.status will not be
	//   overwritten (browser convention)
	stopEventPropagation(e);
	//return false;
	  return true;
	}

function WMS_mouseMove(e){
	if (getMouseXY){
			mouse=getMouseXY(e);
	if (mouse){
		if (!mouse.layer.mouseToolManager("mouseMove",mouse.X,mouse.Y)){	 
			if (mouse.layer.onMouseMove){
				mouse.layer.onMouseMove(mouse.layer,mouse2GeoX(mouse.layer,mouse.X),mouse2GeoY(mouse.layer,mouse.Y));
				}
			}
		}	
	stopEventPropagation(e);
	return false;//true;
		}
	}

function changeBBox(obRef,value)
{
	if (value!=-1)
	{
		var box=value.split(',');
		obRef.updateBBox (box[0],box[1],box[2],box[3]);
	}
}


function changeSelectBBox(obRef,value)
{
	if (value!=-1)
	{
		var box=value.split(',');
		showLayer(obRef.name+"Selection");
		
		obRef.updateBBox ( (box[0]/1)-20.0, (box[1]/1)-20.0, (box[2]/1)+20.0, (box[3]/1)+20.0);
//		obRef.updateBBox ( 30-2, 40-2, 60+2, 50+2);
		obRef.setSelectionXY (box[0],box[1],box[2],box[3]);
	}
}


//undocumented functions 
/* 

function writeNavArrows(x,y, obRef){
	openLayer(obRef.name+"Arrows","","filter:alpha(opacity=80);-moz-opacity:0.80;border-style:solid;border-width:1;background-color:white;", x, y, 64,67, true);	
	
	document.write("<img onclick=moveBy('"+obRef.name+"') style='position:absolute;top:5;left:5' src='"+path_IMG+"nw.gif' width=24 height=24 border=0 alt=''>");
	document.write("<img onclick=moveBy('"+obRef.name+"') style='position:absolute;top:2;left:20' src='"+path_IMG+"n.gif' width=24 height=24 border=0 alt=''>");
	document.write("<img onclick=moveBy('"+obRef.name+"') style='position:absolute;top:5;left:35' src='"+path_IMG+"ne.gif' width=24 height=24 border=0 alt=''>");

	document.write("<img onclick=moveBy('"+obRef.name+"') style='position:absolute;top:21;left:5' src='"+path_IMG+"w.gif' width=24 height=24 border=0 alt=''>");
	document.write("<img onclick=moveBy('"+obRef.name+"') style='position:absolute;top:21;left:37' src='"+path_IMG+"e.gif' width=24 height=24 border=0 alt=''>");

	document.write("<img onclick=moveBy('"+obRef.name+"') style='position:absolute;top:38;left:5' src='"+path_IMG+"sw.gif' width=24 height=24 border=0 alt=''>");
	document.write("<img onclick=moveBy('"+obRef.name+"') style='position:absolute;top:41;left:20' src='"+path_IMG+"s.gif' width=24 height=24 border=0 alt=''>");
	document.write("<img onclick=moveBy('"+obRef.name+"') style='position:absolute;top:38;left:35' src='"+path_IMG+"se.gif' width=24 height=24 border=0 alt=''>");
	}
*/