/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for * full list of contributors). Published under the Clear BSD license. * See http://svn.openlayers.org/trunk/openlayers/license.txt for the * full text of the license. */ /** * @requires OpenLayers/Format/WMSCapabilities/v1.js */ /** * Class: OpenLayers.Format.WMSCapabilities/v1_3 * Abstract base class for WMS Capabilities version 1.3.X. * SLD 1.1.0 adds in the extra operations DescribeLayer and GetLegendGraphic, * see: http://schemas.opengis.net/sld/1.1.0/sld_capabilities.xsd * * Inherits from: * - */ OpenLayers.Format.WMSCapabilities.v1_3 = OpenLayers.Class( OpenLayers.Format.WMSCapabilities.v1, { /** * Property: readers * Contains public functions, grouped by namespace prefix, that will * be applied when a namespaced node is found matching the function * name. The function will be applied in the scope of this parser * with two arguments: the node being read and a context object passed * from the parent. */ readers: { "wms": OpenLayers.Util.applyDefaults({ "WMS_Capabilities": function(node, obj) { this.readChildNodes(node, obj); }, "LayerLimit": function(node, obj) { obj.layerLimit = parseInt(this.getChildValue(node)); }, "MaxWidth": function(node, obj) { obj.maxWidth = parseInt(this.getChildValue(node)); }, "MaxHeight": function(node, obj) { obj.maxHeight = parseInt(this.getChildValue(node)); }, "BoundingBox": function(node, obj) { var bbox = OpenLayers.Format.WMSCapabilities.v1.prototype.readers["wms"].BoundingBox.apply(this, [node, obj]); bbox.srs = node.getAttribute("CRS"); obj.bbox[bbox.srs] = bbox; }, "CRS": function(node, obj) { // CRS is the synonym of SRS this.readers.wms.SRS.apply(this, [node, obj]); }, "EX_GeographicBoundingBox": function(node, obj) { // replacement of LatLonBoundingBox obj.llbbox = []; this.readChildNodes(node, obj.llbbox); }, "westBoundLongitude": function(node, obj) { obj[0] = this.getChildValue(node); }, "eastBoundLongitude": function(node, obj) { obj[2] = this.getChildValue(node); }, "southBoundLatitude": function(node, obj) { obj[1] = this.getChildValue(node); }, "northBoundLatitude": function(node, obj) { obj[3] = this.getChildValue(node); }, "MinScaleDenominator": function(node, obj) { obj.maxScale = parseFloat(this.getChildValue(node)).toPrecision(16); }, "MaxScaleDenominator": function(node, obj) { obj.minScale = parseFloat(this.getChildValue(node)).toPrecision(16); }, "Dimension": function(node, obj) { // dimension has extra attributes: default, multipleValues, // nearestValue, current which used to be part of Extent. It now // also contains the values. var name = node.getAttribute("name").toLowerCase(); var dim = { name: name, units: node.getAttribute("units"), unitsymbol: node.getAttribute("unitSymbol"), nearestVal: node.getAttribute("nearestValue") === "1", multipleVal: node.getAttribute("multipleValues") === "1", "default": node.getAttribute("default") || "", current: node.getAttribute("current") === "1", values: this.getChildValue(node).split(",") }; // Theoretically there can be more dimensions with the same // name, but with a different unit. Until we meet such a case, // let's just keep the same structure as the WMS 1.1 // GetCapabilities parser uses. We will store the last // one encountered. obj.dimensions[dim.name] = dim; }, "Keyword": function(node, obj) { // TODO: should we change the structure of keyword in v1.js? // Make it an object with a value instead of a string? var keyword = {value: this.getChildValue(node), vocabulary: node.getAttribute("vocabulary")}; if (obj.keywords) { obj.keywords.push(keyword); } } }, OpenLayers.Format.WMSCapabilities.v1.prototype.readers["wms"]), "sld": { "UserDefinedSymbolization": function(node, obj) { this.readers.wms.UserDefinedSymbolization.apply(this, [node, obj]); // add the two extra attributes obj.userSymbols.inlineFeature = parseInt(node.getAttribute("InlineFeature")) == 1; obj.userSymbols.remoteWCS = parseInt(node.getAttribute("RemoteWCS")) == 1; }, "DescribeLayer": function(node, obj) { this.readers.wms.DescribeLayer.apply(this, [node, obj]); }, "GetLegendGraphic": function(node, obj) { this.readers.wms.GetLegendGraphic.apply(this, [node, obj]); } } }, CLASS_NAME: "OpenLayers.Format.WMSCapabilities.v1_3" });