[Mapbender-commits] r6418 - trunk/mapbender/http/extensions
svn_mapbender at osgeo.org
svn_mapbender at osgeo.org
Wed Jun 23 08:27:24 EDT 2010
Author: christoph
Date: 2010-06-23 12:27:24 +0000 (Wed, 23 Jun 2010)
New Revision: 6418
Added:
trunk/mapbender/http/extensions/mb_WMSGetFeatureInfo.js
Log:
Added: trunk/mapbender/http/extensions/mb_WMSGetFeatureInfo.js
===================================================================
--- trunk/mapbender/http/extensions/mb_WMSGetFeatureInfo.js (rev 0)
+++ trunk/mapbender/http/extensions/mb_WMSGetFeatureInfo.js 2010-06-23 12:27:24 UTC (rev 6418)
@@ -0,0 +1,125 @@
+OpenLayers.Control.MapbenderWMSGetFeatureInfo = OpenLayers.Class(OpenLayers.Control.WMSGetFeatureInfo, {
+
+ /**
+ * Method: buildWMSOptions
+ * Build an object with the relevant WMS options for the GetFeatureInfo request
+ *
+ * Parameters:
+ * url - {String} The url to be used for sending the request
+ * layers - {Array(<OpenLayers.Layer.WMS)} An array of layers
+ * clickPosition - {<OpenLayers.Pixel>} The position on the map where the mouse
+ * event occurred.
+ * format - {String} The format from the corresponding GetMap request
+ */
+ buildWMSOptions: function(url, layers, clickPosition, format) {
+ var layerNames = [], styleNames = [], queryLayerNames = [];
+ for (var i = 0, len = layers.length; i < len; i++) {
+ layerNames = layerNames.concat(layers[i].params.LAYERS);
+ queryLayerNames = queryLayerNames.concat(layers[i].params.QUERY_LAYERS);
+ styleNames = styleNames.concat(this.getStyleNames(layers[i]));
+ }
+
+ var params = OpenLayers.Util.extend({
+ service: "WMS",
+ version: layers[0].params.VERSION,
+ request: "GetFeatureInfo",
+ layers: layerNames,
+ query_layers: queryLayerNames,
+ styles: styleNames,
+ bbox: this.map.getExtent().toBBOX(null,
+ layers[0].reverseAxisOrder()),
+ feature_count: this.maxFeatures,
+ height: this.map.getSize().h,
+ width: this.map.getSize().w,
+ format: format,
+ info_format: this.infoFormat
+ }, (parseFloat(layers[0].params.VERSION) >= 1.3) ?
+ {
+ crs: this.map.getProjection(),
+ i: clickPosition.x,
+ j: clickPosition.y
+ } :
+ {
+ srs: this.map.getProjection(),
+ x: clickPosition.x,
+ y: clickPosition.y
+ }
+ );
+ OpenLayers.Util.applyDefaults(params, this.vendorParams);
+ return {
+ url: url,
+ params: OpenLayers.Util.upperCaseObject(params),
+ callback: function(request) {
+ this.handleResponse(clickPosition, request);
+ },
+ scope: this
+ };
+ },
+ request: function(clickPosition, options) {
+ var layers = this.findLayers();
+ if(layers.length == 0) {
+ // Reset the cursor.
+ OpenLayers.Element.removeClass(this.map.viewPortDiv, "olCursorWait");
+ return;
+ }
+
+ var noQueryLayers = function (queryLayerNames) {
+ for (var i = 0; i < queryLayerNames.params.QUERY_LAYERS.length; i++) {
+ if (queryLayerNames.params.QUERY_LAYERS[i] !== "") {
+ return false;
+ }
+ }
+ return true;
+ };
+
+ options = options || {};
+ if(this.drillDown === false) {
+ var wmsOptions = this.buildWMSOptions(this.url, layers,
+ clickPosition, layers[0].params.FORMAT);
+ if (noQueryLayers(wmsOptions)) {
+ OpenLayers.Element.removeClass(this.map.viewPortDiv, "olCursorWait");
+ return;
+ }
+ var response = OpenLayers.Request.GET(wmsOptions);
+
+ if (options.hover === true) {
+ this.hoverRequest = response.priv;
+ }
+ } else {
+ this._requestCount = 0;
+ this._numRequests = 0;
+ this.features = [];
+ // group according to service url to combine requests
+ var services = {}, url;
+ for(var i=0, len=layers.length; i<len; i++) {
+ var layer = layers[i];
+ var service, found = false;
+ url = layer.url instanceof Array ? layer.url[0] : layer.url;
+ if(url in services) {
+ services[url].push(layer);
+ } else {
+ this._numRequests++;
+ services[url] = [layer];
+ }
+ }
+
+ var layers;
+ var noRequest = true;
+ for (var url in services) {
+ layers = services[url];
+ var wmsOptions = this.buildWMSOptions(url, layers,
+ clickPosition, layers[0].params.FORMAT);
+ if (noQueryLayers(wmsOptions)) {
+ continue;
+ }
+ noRequest = false;
+ OpenLayers.Request.GET(wmsOptions);
+ }
+ if (noRequest) {
+ OpenLayers.Element.removeClass(this.map.viewPortDiv, "olCursorWait");
+ }
+ }
+ },
+
+ CLASS_NAME: "OpenLayers.Control.MapbenderWMSGetFeatureInfo"
+});
More information about the Mapbender_commits
mailing list