go ahead and commit this (relatively lighttweight) patch to the code so that the projection library base API is there, even though for the most part, it's not usable yet. This changes map.projection from being a string to being a class, with a projCode on it. (Closes #1035) git-svn-id: http://svn.openlayers.org/trunk/openlayers@5401 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
223 lines
7.3 KiB
JavaScript
223 lines
7.3 KiB
JavaScript
/* Copyright (c) 2006-2007 MetaCarta, Inc., published under the Clear BSD
|
|
* license. See http://svn.openlayers.org/trunk/openlayers/license.txt for the
|
|
* full text of the license. */
|
|
|
|
|
|
/**
|
|
* @requires OpenLayers/Layer/Grid.js
|
|
* @requires OpenLayers/Tile/Image.js
|
|
*
|
|
* Class: OpenLayers.Layer.WMS
|
|
* Instances of OpenLayers.Layer.WMS are used to display data from OGC Web
|
|
* Mapping Services. Create a new WMS layer with the <OpenLayers.Layer.WMS>
|
|
* constructor.
|
|
*
|
|
* Inherits from:
|
|
* - <OpenLayers.Layer.Grid>
|
|
*/
|
|
OpenLayers.Layer.WMS = OpenLayers.Class(OpenLayers.Layer.Grid, {
|
|
|
|
/**
|
|
* Constant: DEFAULT_PARAMS
|
|
* {Object} Hashtable of default parameter key/value pairs
|
|
*/
|
|
DEFAULT_PARAMS: { service: "WMS",
|
|
version: "1.1.1",
|
|
request: "GetMap",
|
|
styles: "",
|
|
exceptions: "application/vnd.ogc.se_inimage",
|
|
format: "image/jpeg"
|
|
},
|
|
|
|
/**
|
|
* Property: reproject
|
|
* *Deprecated*. See http://trac.openlayers.org/wiki/SphericalMercator
|
|
* for information on the replacement for this functionality.
|
|
* {Boolean} Try to reproject this layer if its coordinate reference system
|
|
* is different than that of the base layer. Default is true.
|
|
* Set this in the layer options. Should be set to false in
|
|
* most cases.
|
|
*/
|
|
reproject: false,
|
|
|
|
/**
|
|
* APIProperty: isBaseLayer
|
|
* {Boolean} Default is true for WMS layer
|
|
*/
|
|
isBaseLayer: true,
|
|
|
|
/**
|
|
* APIProperty: encodeBBOX
|
|
* {Boolean} Should the BBOX commas be encoded? The WMS spec says 'no',
|
|
* but some services want it that way. Default false.
|
|
*/
|
|
encodeBBOX: false,
|
|
|
|
/**
|
|
* Constructor: OpenLayers.Layer.WMS
|
|
* Create a new WMS layer object
|
|
*
|
|
* Example:
|
|
* (code)
|
|
* var wms = new OpenLayers.Layer.WMS("NASA Global Mosaic",
|
|
* "http://wms.jpl.nasa.gov/wms.cgi",
|
|
* {layers: "modis,global_mosaic"});
|
|
* (end)
|
|
*
|
|
* Parameters:
|
|
* name - {String} A name for the layer
|
|
* url - {String} Base url for the WMS
|
|
* (e.g. http://wms.jpl.nasa.gov/wms.cgi)
|
|
* params - {Object} An object with key/value pairs representing the
|
|
* GetMap query string parameters and parameter values.
|
|
* options - {Ojbect} Hashtable of extra options to tag onto the layer
|
|
*/
|
|
initialize: function(name, url, params, options) {
|
|
var newArguments = [];
|
|
//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)
|
|
);
|
|
|
|
|
|
//layer is transparent
|
|
if (this.params.TRANSPARENT &&
|
|
this.params.TRANSPARENT.toString().toLowerCase() == "true") {
|
|
|
|
// unless explicitly set in options, make layer an overlay
|
|
if ( (options == null) || (!options.isBaseLayer) ) {
|
|
this.isBaseLayer = false;
|
|
}
|
|
|
|
// jpegs can never be transparent, so intelligently switch the
|
|
// format, depending on teh browser's capabilities
|
|
if (this.params.FORMAT == "image/jpeg") {
|
|
this.params.FORMAT = OpenLayers.Util.alphaHack() ? "image/gif"
|
|
: "image/png";
|
|
}
|
|
}
|
|
|
|
},
|
|
|
|
/**
|
|
* Method: destroy
|
|
* Destroy this layer
|
|
*/
|
|
destroy: function() {
|
|
// for now, nothing special to do here.
|
|
OpenLayers.Layer.Grid.prototype.destroy.apply(this, arguments);
|
|
},
|
|
|
|
|
|
/**
|
|
* Method: clone
|
|
* Create a clone of this layer
|
|
*
|
|
* Returns:
|
|
* {<OpenLayers.Layer.WMS>} An exact clone of this layer
|
|
*/
|
|
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;
|
|
},
|
|
|
|
/**
|
|
* Method: getURL
|
|
* Return a GetMap query string for this layer
|
|
*
|
|
* Parameters:
|
|
* bounds - {<OpenLayers.Bounds>} A bounds representing the bbox for the
|
|
* request.
|
|
*
|
|
* Returns:
|
|
* {String} A string with the layer's url and parameters and also the
|
|
* passed-in bounds and appropriate tile size specified as
|
|
* parameters.
|
|
*/
|
|
getURL: function (bounds) {
|
|
bounds = this.adjustBounds(bounds);
|
|
|
|
var imageSize = this.getImageSize();
|
|
var newParams = {
|
|
'BBOX': this.encodeBBOX ? bounds.toBBOX() : bounds.toArray(),
|
|
'WIDTH': imageSize.w,
|
|
'HEIGHT': imageSize.h
|
|
};
|
|
var requestString = this.getFullRequestString(newParams);
|
|
return requestString;
|
|
},
|
|
|
|
/**
|
|
* Method: addTile
|
|
* addTile creates a tile, initializes it, and adds it to the layer div.
|
|
*
|
|
* Parameters:
|
|
* bounds - {<OpenLayers.Bounds>}
|
|
*
|
|
* Returns:
|
|
* {<OpenLayers.Tile.Image>} The added OpenLayers.Tile.Image
|
|
*/
|
|
addTile:function(bounds,position) {
|
|
return new OpenLayers.Tile.Image(this, position, bounds,
|
|
null, this.tileSize);
|
|
},
|
|
|
|
/**
|
|
* APIMethod: mergeNewParams
|
|
* 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.
|
|
*
|
|
* Parameters:
|
|
* newParams - {Object} 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);
|
|
},
|
|
|
|
/**
|
|
* Method: getFullRequestString
|
|
* 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.
|
|
*
|
|
* Parameters:
|
|
* newParams - {Object}
|
|
* altUrl - {String} Use this as the url instead of the layer's url
|
|
*
|
|
* Returns:
|
|
* {String}
|
|
*/
|
|
getFullRequestString:function(newParams, altUrl) {
|
|
var projectionCode = this.map.getProjection();
|
|
this.params.SRS = (projectionCode == "none") ? null : projectionCode;
|
|
|
|
return OpenLayers.Layer.Grid.prototype.getFullRequestString.apply(
|
|
this, arguments);
|
|
},
|
|
|
|
CLASS_NAME: "OpenLayers.Layer.WMS"
|
|
});
|