Project

General

Profile

1
/*
2
License: LGPL as per: http://www.gnu.org/copyleft/lesser.html
3
Dependancies: Context
4
$Id: GetFeatureInfo.js 3906 2008-03-05 10:27:30Z ahocevar $
5
*/
6

    
7
// Ensure this object's dependancies are loaded.
8
mapbuilder.loadScript(baseDir+"/widget/ButtonBase.js");
9
/**
10
 * Implements WMS GetFeatureInfo functionality, popping up a query result
11
 * window when user clicks on map.
12
 * @constructor
13
 * @base ButtonBase
14
 * @author Nedjo
15
 * @constructor
16
 * @param toolNode The XML node in the Config file referencing this object.
17
 * @param model The widget object which this tool is associated with.
18
 */
19
function GetFeatureInfo(widgetNode, model) {
20
  // Extend ButtonBase
21
  ButtonBase.apply(this, new Array(widgetNode, model));
22

    
23
  /** Xsl to build a GetFeatureInfo URL */
24
  this.xsl = new XslProcessor(
25
      this.getProperty("mb:stylesheet", baseDir+"/tool/GetFeatureInfo.xsl"));
26
  
27
  /**
28
   * Determine whether Query result is returned as text, HTML or GML
29
   * This is usually text/plain, text/html or application/vnd.ogc.gml
30
   */
31
  this.infoFormat = this.getProperty("mb:infoFormat", "application/vnd.ogc.gml");
32

    
33
  // Get the value for featureCount from the configfile
34
  this.featureCount = this.getProperty("mb:featureCount", 1);
35

    
36
  this.cursor = "pointer"; 
37

    
38
  /**
39
   * GetFeatureInfo control
40
   * @param objRef reference to this object.
41
   * @return {OpenLayers.Control} class of the OL control.
42
   */
43
  this.createControl = function(objRef) {
44
    var Control = OpenLayers.Class( OpenLayers.Control, {
45
      CLASS_NAME: 'mbControl.GetFeatureInfo',
46
      type: OpenLayers.Control.TYPE_TOOL,
47
      draw: function() {
48
        this.handler = new OpenLayers.Handler.Box( this,
49
          {done: this.zoomBox}, {keyMask: this.keyMask} );
50
      },
51
      zoomBox: function(position) {
52
        var objRef = this.objRef
53
        if (objRef.enabled) {
54
          var x,y;
55
          if (position instanceof OpenLayers.Bounds) {
56
            x = position.left + (position.right - position.left) / 2;
57
            y = position.top + (position.bottom - position.top) / 2;
58
          } else {
59
            x = position.x;
60
            y = position.y;
61
          }
62
          objRef.targetModel.deleteTemplates();
63
          var selectedLayer=objRef.targetContext.getParam("selectedLayer");
64
          if (selectedLayer==null) {
65
            var queryList=objRef.targetContext.getQueryableLayers();
66
          	if (queryList.length==0) {
67
               alert(mbGetMessage("noQueryableLayers"));
68
               return;
69
          	}
70
            else {
71
              for (var i=0; i<queryList.length; ++i) {
72
                var layerNode = queryList[i];
73
                
74
                // Get the name of the layer
75
                var layerName = Mapbuilder.getProperty(layerNode, "wmc:Name", "");
76

    
77
                // Get the layerId. Fallback to layerName if non-existent
78
                var layerId = layerNode.getAttribute("id") || layerName;
79

    
80
                var hidden = objRef.targetContext.getHidden(layerId);
81
                if (hidden == 0) { //query only visible layers
82
                  objRef.xsl.setParameter("queryLayer", layerName);
83
                  objRef.xsl.setParameter("layer",layerName);
84
    				      objRef.xsl.setParameter("xCoord", x);
85
                  objRef.xsl.setParameter("yCoord", y);
86
                  objRef.xsl.setParameter("infoFormat", objRef.infoFormat);
87
                  objRef.xsl.setParameter("featureCount", objRef.featureCount);
88
    
89
                  urlNode=objRef.xsl.transformNodeToObject(objRef.targetContext.doc);
90
                  url=getNodeValue(urlNode.documentElement);
91
                  httpPayload = new Object();
92
      	          httpPayload.url = url;
93
                  httpPayload.method="get";
94
                  httpPayload.postData=null;
95
                  objRef.targetModel.newRequest(objRef.targetModel,httpPayload);
96
                }
97
              }
98
            }
99
          }
100
          else {
101
            objRef.xsl.setParameter("queryLayer", selectedLayer);
102
            objRef.xsl.setParameter("layer", layerName);
103
            objRef.xsl.setParameter("xCoord", x);
104
            objRef.xsl.setParameter("yCoord", y);
105
            objRef.xsl.setParameter("infoFormat", objRef.infoFormat);
106
            objRef.xsl.setParameter("featureCount", objRef.featureCount);
107
  
108
            var urlNode=objRef.xsl.transformNodeToObject(objRef.targetContext.doc);
109
            var url=getNodeValue(urlNode.documentElement);
110
  
111
            if (objRef.infoFormat=="text/html"){
112
              window.open(url,'queryWin','height=200,width=300,scrollbars=yes');
113
            } else {
114
              var httpPayload = new Object();
115
              httpPayload.url = url;
116
              httpPayload.method="get";
117
              httpPayload.postData=null;
118
              objRef.targetModel.newRequest(objRef.targetModel,httpPayload);
119
            }
120
          }
121
        }
122
      }
123
    });
124
    return Control;
125
  }
126
}
(40-40/145)