add WMS 1.3 GetCapabilities parser, r=ahocevar (closes #2294)
git-svn-id: http://svn.openlayers.org/trunk/openlayers@9894 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
123
lib/OpenLayers/Format/WMSCapabilities/v1_3.js
Normal file
123
lib/OpenLayers/Format/WMSCapabilities/v1_3.js
Normal file
@@ -0,0 +1,123 @@
|
||||
/**
|
||||
* @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>
|
||||
*/
|
||||
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"
|
||||
|
||||
});
|
||||
Reference in New Issue
Block a user