other than WMS. It should do this for any Grid layer. Ticket #496 includes a patch for this: it adds a mergeNewParams call at the Layer.Grid level, (subclassing Layer.HTTPRequest) which reinits the tile grid. This commit also includes tests for this functionality. Since testing directly on the Grid layer doesn't work (it's meant to be subclassed), we need to instead pick a second layer to test -- in this case, ka-Map. Thanks to Bill Woodall for the patch. git-svn-id: http://svn.openlayers.org/trunk/openlayers@2237 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
152 lines
4.8 KiB
JavaScript
152 lines
4.8 KiB
JavaScript
/* Copyright (c) 2006 MetaCarta, Inc., published under a modified BSD license.
|
|
* See http://svn.openlayers.org/trunk/openlayers/repository-license.txt
|
|
* for the full text of the license. */
|
|
|
|
|
|
/**
|
|
* @class
|
|
*
|
|
* @requires OpenLayers/Layer/Grid.js
|
|
*/
|
|
OpenLayers.Layer.WMS = OpenLayers.Class.create();
|
|
OpenLayers.Layer.WMS.prototype =
|
|
OpenLayers.Class.inherit( OpenLayers.Layer.Grid, {
|
|
|
|
/** Hashtable of default parameter key/value pairs
|
|
* @final @type Object */
|
|
DEFAULT_PARAMS: { service: "WMS",
|
|
version: "1.1.1",
|
|
request: "GetMap",
|
|
styles: "",
|
|
exceptions: "application/vnd.ogc.se_inimage",
|
|
format: "image/jpeg"
|
|
},
|
|
|
|
reproject: true,
|
|
|
|
/**
|
|
* @constructor
|
|
*
|
|
* @param {String} name
|
|
* @param {String} url
|
|
* @param {Object} params
|
|
* @param {Object} options Hashtable of extra options to tag onto the layer
|
|
*/
|
|
initialize: function(name, url, params, options) {
|
|
var newArguments = new Array();
|
|
//uppercase params
|
|
params = OpenLayers.Util.upperCaseObject(params);
|
|
newArguments.push(name, url, params, options);
|
|
OpenLayers.Layer.Grid.prototype.initialize.apply(this, newArguments);
|
|
OpenLayers.Util.applyDefaults(
|
|
this.params,
|
|
OpenLayers.Util.upperCaseObject(this.DEFAULT_PARAMS)
|
|
);
|
|
|
|
// unless explicitly set in options, if the layer is transparent,
|
|
// it will be an overlay
|
|
if (options == null || options.isBaseLayer == null) {
|
|
this.isBaseLayer = ((this.params.TRANSPARENT != "true") &&
|
|
(this.params.TRANSPARENT != true));
|
|
}
|
|
},
|
|
|
|
/**
|
|
*
|
|
*/
|
|
destroy: function() {
|
|
// for now, nothing special to do here.
|
|
OpenLayers.Layer.Grid.prototype.destroy.apply(this, arguments);
|
|
},
|
|
|
|
|
|
/**
|
|
* @param {Object} obj
|
|
*
|
|
* @returns An exact clone of this OpenLayers.Layer.WMS
|
|
* @type OpenLayers.Layer.WMS
|
|
*/
|
|
clone: function (obj) {
|
|
|
|
if (obj == null) {
|
|
obj = new OpenLayers.Layer.WMS(this.name,
|
|
this.url,
|
|
this.params,
|
|
this.options);
|
|
}
|
|
|
|
//get all additions from superclasses
|
|
obj = OpenLayers.Layer.Grid.prototype.clone.apply(this, [obj]);
|
|
|
|
// copy/set any non-init, non-simple values here
|
|
|
|
return obj;
|
|
},
|
|
|
|
/**
|
|
* @param {OpenLayers.Bounds} bounds
|
|
*
|
|
* @returns A string with the layer's url and parameters and also the
|
|
* passed-in bounds and appropriate tile size specified as
|
|
* parameters
|
|
* @type String
|
|
*/
|
|
getURL: function (bounds) {
|
|
return this.getFullRequestString(
|
|
{BBOX:bounds.toBBOX(),
|
|
WIDTH:this.tileSize.w,
|
|
HEIGHT:this.tileSize.h});
|
|
},
|
|
|
|
/**
|
|
* addTile creates a tile, initializes it, and
|
|
* adds it to the layer div.
|
|
*
|
|
* @param {OpenLayers.Bounds} bounds
|
|
*
|
|
* @returns The added OpenLayers.Tile.Image
|
|
* @type OpenLayers.Tile.Image
|
|
*/
|
|
addTile:function(bounds,position) {
|
|
url = this.getURL(bounds);
|
|
return new OpenLayers.Tile.Image(this, position, bounds,
|
|
url, this.tileSize);
|
|
},
|
|
|
|
/**
|
|
* Catch changeParams and uppercase the new params to be merged in
|
|
* before calling changeParams on the super class.
|
|
*
|
|
* Once params have been changed, we will need to re-init our tiles
|
|
*
|
|
* @param {Object} newParams Hashtable of new params to use
|
|
*/
|
|
mergeNewParams:function(newParams) {
|
|
var upperParams = OpenLayers.Util.upperCaseObject(newParams);
|
|
var newArguments = [upperParams];
|
|
OpenLayers.Layer.Grid.prototype.mergeNewParams.apply(this,
|
|
newArguments);
|
|
},
|
|
|
|
/** combine the layer's url with its params and these newParams.
|
|
*
|
|
* Add the SRS parameter from projection -- this is probably
|
|
* more eloquently done via a setProjection() method, but this
|
|
* works for now and always.
|
|
*
|
|
* @param {Object} newParams
|
|
*
|
|
* @type String
|
|
*/
|
|
getFullRequestString:function(newParams) {
|
|
var projection = this.map.getProjection();
|
|
this.params.SRS = (projection == "none") ? null : projection;
|
|
|
|
return OpenLayers.Layer.Grid.prototype.getFullRequestString.apply(
|
|
this, arguments);
|
|
},
|
|
|
|
/** @final @type String */
|
|
CLASS_NAME: "OpenLayers.Layer.WMS"
|
|
});
|