1 | /* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for |
---|
2 | * full list of contributors). Published under the Clear BSD license. |
---|
3 | * See http://svn.openlayers.org/trunk/openlayers/license.txt for the |
---|
4 | * full text of the license. */ |
---|
5 | |
---|
6 | /** |
---|
7 | * @requires OpenLayers/Format/WMTSCapabilities.js |
---|
8 | * @requires OpenLayers/Format/OWSCommon/v1_1_0.js |
---|
9 | */ |
---|
10 | |
---|
11 | /** |
---|
12 | * Class: OpenLayers.Format.WMTSCapabilities.v1_0_0 |
---|
13 | * Read WMTS Capabilities version 1.0.0. |
---|
14 | * |
---|
15 | * Inherits from: |
---|
16 | * - <OpenLayers.Format.WMTSCapabilities> |
---|
17 | */ |
---|
18 | OpenLayers.Format.WMTSCapabilities.v1_0_0 = OpenLayers.Class( |
---|
19 | OpenLayers.Format.OWSCommon.v1_1_0, { |
---|
20 | |
---|
21 | /** |
---|
22 | * Property: version |
---|
23 | * {String} The parser version ("1.0.0"). |
---|
24 | */ |
---|
25 | version: "1.0.0", |
---|
26 | |
---|
27 | /** |
---|
28 | * Property: namespaces |
---|
29 | * {Object} Mapping of namespace aliases to namespace URIs. |
---|
30 | */ |
---|
31 | namespaces: { |
---|
32 | ows: "http://www.opengis.net/ows/1.1", |
---|
33 | wmts: "http://www.opengis.net/wmts/1.0", |
---|
34 | xlink: "http://www.w3.org/1999/xlink" |
---|
35 | }, |
---|
36 | |
---|
37 | /** |
---|
38 | * Property: yx |
---|
39 | * {Object} Members in the yx object are used to determine if a CRS URN |
---|
40 | * corresponds to a CRS with y,x axis order. Member names are CRS URNs |
---|
41 | * and values are boolean. Defaults come from the |
---|
42 | * <OpenLayers.Format.WMTSCapabilities> prototype. |
---|
43 | */ |
---|
44 | yx: null, |
---|
45 | |
---|
46 | /** |
---|
47 | * Property: defaultPrefix |
---|
48 | * {String} The default namespace alias for creating element nodes. |
---|
49 | */ |
---|
50 | defaultPrefix: "wmts", |
---|
51 | |
---|
52 | /** |
---|
53 | * Constructor: OpenLayers.Format.WMTSCapabilities.v1_0_0 |
---|
54 | * Create a new parser for WMTS capabilities version 1.0.0. |
---|
55 | * |
---|
56 | * Parameters: |
---|
57 | * options - {Object} An optional object whose properties will be set on |
---|
58 | * this instance. |
---|
59 | */ |
---|
60 | initialize: function(options) { |
---|
61 | OpenLayers.Format.XML.prototype.initialize.apply(this, [options]); |
---|
62 | this.options = options; |
---|
63 | var yx = OpenLayers.Util.extend( |
---|
64 | {}, OpenLayers.Format.WMTSCapabilities.prototype.yx |
---|
65 | ); |
---|
66 | this.yx = OpenLayers.Util.extend(yx, this.yx); |
---|
67 | }, |
---|
68 | |
---|
69 | /** |
---|
70 | * APIMethod: read |
---|
71 | * Read capabilities data from a string, and return info about the WMTS. |
---|
72 | * |
---|
73 | * Parameters: |
---|
74 | * data - {String} or {DOMElement} data to read/parse. |
---|
75 | * |
---|
76 | * Returns: |
---|
77 | * {Object} Information about the SOS service. |
---|
78 | */ |
---|
79 | read: function(data) { |
---|
80 | if(typeof data == "string") { |
---|
81 | data = OpenLayers.Format.XML.prototype.read.apply(this, [data]); |
---|
82 | } |
---|
83 | if(data && data.nodeType == 9) { |
---|
84 | data = data.documentElement; |
---|
85 | } |
---|
86 | var capabilities = {}; |
---|
87 | this.readNode(data, capabilities); |
---|
88 | capabilities.version = this.version; |
---|
89 | return capabilities; |
---|
90 | }, |
---|
91 | |
---|
92 | /** |
---|
93 | * Property: readers |
---|
94 | * Contains public functions, grouped by namespace prefix, that will |
---|
95 | * be applied when a namespaced node is found matching the function |
---|
96 | * name. The function will be applied in the scope of this parser |
---|
97 | * with two arguments: the node being read and a context object passed |
---|
98 | * from the parent. |
---|
99 | */ |
---|
100 | readers: { |
---|
101 | "wmts": { |
---|
102 | "Capabilities": function(node, obj) { |
---|
103 | this.readChildNodes(node, obj); |
---|
104 | }, |
---|
105 | "Contents": function(node, obj) { |
---|
106 | obj.contents = {}; |
---|
107 | obj.contents.layers = []; |
---|
108 | obj.contents.tileMatrixSets = {}; |
---|
109 | this.readChildNodes(node, obj.contents); |
---|
110 | }, |
---|
111 | "Layer": function(node, obj) { |
---|
112 | var layer = { |
---|
113 | styles: [], |
---|
114 | formats: [], |
---|
115 | tileMatrixSetLinks: [] |
---|
116 | }; |
---|
117 | layer.layers = []; |
---|
118 | this.readChildNodes(node, layer); |
---|
119 | obj.layers.push(layer); |
---|
120 | }, |
---|
121 | "Style": function(node, obj) { |
---|
122 | var style = {}; |
---|
123 | style.isDefault = (node.getAttribute("isDefault") === "true"); |
---|
124 | this.readChildNodes(node, style); |
---|
125 | obj.styles.push(style); |
---|
126 | }, |
---|
127 | "Format": function(node, obj) { |
---|
128 | obj.formats.push(this.getChildValue(node)); |
---|
129 | }, |
---|
130 | "TileMatrixSetLink": function(node, obj) { |
---|
131 | var tileMatrixSetLink = {}; |
---|
132 | this.readChildNodes(node, tileMatrixSetLink); |
---|
133 | obj.tileMatrixSetLinks.push(tileMatrixSetLink); |
---|
134 | }, |
---|
135 | "TileMatrixSet": function(node, obj) { |
---|
136 | // node could be child of wmts:Contents or wmts:TileMatrixSetLink |
---|
137 | // duck type wmts:Contents by looking for layers |
---|
138 | if (obj.layers) { |
---|
139 | // TileMatrixSet as object type in schema |
---|
140 | var tileMatrixSet = { |
---|
141 | matrixIds: [] |
---|
142 | }; |
---|
143 | this.readChildNodes(node, tileMatrixSet); |
---|
144 | obj.tileMatrixSets[tileMatrixSet.identifier] = tileMatrixSet; |
---|
145 | } else { |
---|
146 | // TileMatrixSet as string type in schema |
---|
147 | obj.tileMatrixSet = this.getChildValue(node); |
---|
148 | } |
---|
149 | }, |
---|
150 | "TileMatrix": function(node, obj) { |
---|
151 | var tileMatrix = { |
---|
152 | supportedCRS: obj.supportedCRS |
---|
153 | }; |
---|
154 | this.readChildNodes(node, tileMatrix); |
---|
155 | obj.matrixIds.push(tileMatrix); |
---|
156 | }, |
---|
157 | "ScaleDenominator": function(node, obj) { |
---|
158 | obj.scaleDenominator = parseFloat(this.getChildValue(node)); |
---|
159 | }, |
---|
160 | "TopLeftCorner": function(node, obj) { |
---|
161 | var topLeftCorner = this.getChildValue(node); |
---|
162 | var coords = topLeftCorner.split(" "); |
---|
163 | // decide on axis order for the given CRS |
---|
164 | var yx; |
---|
165 | if (obj.supportedCRS) { |
---|
166 | // extract out version from URN |
---|
167 | var crs = obj.supportedCRS.replace( |
---|
168 | /urn:ogc:def:crs:(\w+):.+:(\w+)$/, |
---|
169 | "urn:ogc:def:crs:$1::$2" |
---|
170 | ); |
---|
171 | yx = !!this.yx[crs]; |
---|
172 | } |
---|
173 | if (yx) { |
---|
174 | obj.topLeftCorner = new OpenLayers.LonLat( |
---|
175 | coords[1], coords[0] |
---|
176 | ); |
---|
177 | } else { |
---|
178 | obj.topLeftCorner = new OpenLayers.LonLat( |
---|
179 | coords[0], coords[1] |
---|
180 | ); |
---|
181 | } |
---|
182 | }, |
---|
183 | "TileWidth": function(node, obj) { |
---|
184 | obj.tileWidth = parseInt(this.getChildValue(node)); |
---|
185 | }, |
---|
186 | "TileHeight": function(node, obj) { |
---|
187 | obj.tileHeight = parseInt(this.getChildValue(node)); |
---|
188 | }, |
---|
189 | "MatrixWidth": function(node, obj) { |
---|
190 | obj.matrixWidth = parseInt(this.getChildValue(node)); |
---|
191 | }, |
---|
192 | "MatrixHeight": function(node, obj) { |
---|
193 | obj.matrixHeight = parseInt(this.getChildValue(node)); |
---|
194 | }, |
---|
195 | // not used for now, can be added in the future though |
---|
196 | /*"Themes": function(node, obj) { |
---|
197 | obj.themes = []; |
---|
198 | this.readChildNodes(node, obj.themes); |
---|
199 | }, |
---|
200 | "Theme": function(node, obj) { |
---|
201 | var theme = {}; |
---|
202 | this.readChildNodes(node, theme); |
---|
203 | obj.push(theme); |
---|
204 | },*/ |
---|
205 | "WSDL": function(node, obj) { |
---|
206 | obj.wsdl = {}; |
---|
207 | obj.wsdl.href = node.getAttribute("xlink:href"); |
---|
208 | // TODO: other attributes of <WSDL> element |
---|
209 | }, |
---|
210 | "ServiceMetadataURL": function(node, obj) { |
---|
211 | obj.serviceMetadataUrl = {}; |
---|
212 | obj.serviceMetadataUrl.href = node.getAttribute("xlink:href"); |
---|
213 | // TODO: other attributes of <ServiceMetadataURL> element |
---|
214 | } |
---|
215 | }, |
---|
216 | "ows": OpenLayers.Format.OWSCommon.v1_1_0.prototype.readers["ows"] |
---|
217 | }, |
---|
218 | |
---|
219 | CLASS_NAME: "OpenLayers.Format.WMTSCapabilities.v1_0_0" |
---|
220 | |
---|
221 | }); |
---|