diff --git a/examples/wmts-capabilities.js b/examples/wmts-capabilities.js
index 0b2e011c99..103f5f5bcd 100644
--- a/examples/wmts-capabilities.js
+++ b/examples/wmts-capabilities.js
@@ -1,4 +1,4 @@
-OpenLayers.ProxyHost = "/proxy/?url=";
+OpenLayers.ProxyHost = "proxy.cgi/?url=";
var map, format;
diff --git a/lib/OpenLayers/Format/WMTSCapabilities.js b/lib/OpenLayers/Format/WMTSCapabilities.js
index b8b667437f..02c7ab321c 100644
--- a/lib/OpenLayers/Format/WMTSCapabilities.js
+++ b/lib/OpenLayers/Format/WMTSCapabilities.js
@@ -73,6 +73,8 @@ OpenLayers.Format.WMTSCapabilities = OpenLayers.Class(OpenLayers.Format.XML.Vers
* matrixSet - {String} The matrix set identifier, required if there is
* more than one matrix set in the layer capabilities.
* style - {String} The name of the style
+ * format - {String} Image format for the layer. Default is the first
+ * format returned in the GetCapabilities response.
* param - {Object} The dimensions values eg: {"Year": "2012"}
*
* Returns:
@@ -102,6 +104,11 @@ OpenLayers.Format.WMTSCapabilities = OpenLayers.Class(OpenLayers.Format.XML.Vers
if (!layerDef) {
throw new Error("Layer not found");
}
+
+ var format = config.format;
+ if (!format && layerDef.formats && layerDef.formats.length) {
+ format = layerDef.formats[0];
+ }
// find the matrixSet definition
var matrixSet;
@@ -170,17 +177,26 @@ OpenLayers.Format.WMTSCapabilities = OpenLayers.Class(OpenLayers.Format.XML.Vers
}
var url;
- if (requestEncoding === "REST" && layerDef.resourceUrl) {
- url = layerDef.resourceUrl.tile.template;
+ if (requestEncoding === "REST" && layerDef.resourceUrls) {
+ url = [];
+ var resourceUrls = layerDef.resourceUrls,
+ resourceUrl;
+ for (var t = 0, tt = layerDef.resourceUrls.length; t < tt; ++t) {
+ resourceUrl = layerDef.resourceUrls[t];
+ if (resourceUrl.format === format && resourceUrl.resourceType === "tile") {
+ url.push(resourceUrl.template);
+ }
+ }
}
else {
var httpGet = capabilities.operationsMetadata.GetTile.dcp.http.get;
- url = httpGet[0].url;
+ url = [];
+ var constraint;
for (var i = 0, ii = httpGet.length; i < ii; i++) {
- if (httpGet[i].constraints && httpGet[i].constraints.
- GetEncoding.allowedValues[requestEncoding]) {
- url = httpGet[i].url;
- break;
+ constraint = httpGet[i].constraints;
+ if (!constraint || (constraint && constraint.
+ GetEncoding.allowedValues[requestEncoding])) {
+ url.push(httpGet[i].url);
}
}
}
@@ -191,6 +207,7 @@ OpenLayers.Format.WMTSCapabilities = OpenLayers.Class(OpenLayers.Format.XML.Vers
requestEncoding: requestEncoding,
name: layerDef.title,
style: style.identifier,
+ format: format,
matrixIds: matrixSet.matrixIds,
matrixSet: matrixSet.identifier,
projection: projection,
diff --git a/lib/OpenLayers/Format/WMTSCapabilities/v1_0_0.js b/lib/OpenLayers/Format/WMTSCapabilities/v1_0_0.js
index d65409eb73..620b9ea5dc 100644
--- a/lib/OpenLayers/Format/WMTSCapabilities/v1_0_0.js
+++ b/lib/OpenLayers/Format/WMTSCapabilities/v1_0_0.js
@@ -195,10 +195,16 @@ OpenLayers.Format.WMTSCapabilities.v1_0_0 = OpenLayers.Class(
},
"ResourceURL": function(node, obj) {
obj.resourceUrl = obj.resourceUrl || {};
- obj.resourceUrl[node.getAttribute("resourceType")] = {
+ var resourceType = node.getAttribute("resourceType");
+ if (!obj.resourceUrls) {
+ obj.resourceUrls = [];
+ }
+ var resourceUrl = obj.resourceUrl[resourceType] = {
format: node.getAttribute("format"),
- template: node.getAttribute("template")
+ template: node.getAttribute("template"),
+ resourceType: resourceType
};
+ obj.resourceUrls.push(resourceUrl);
},
// not used for now, can be added in the future though
/*"Themes": function(node, obj) {
diff --git a/tests/Format/WMTSCapabilities/v1_0_0.html b/tests/Format/WMTSCapabilities/v1_0_0.html
index 9017e0ed71..98dc00f3c0 100644
--- a/tests/Format/WMTSCapabilities/v1_0_0.html
+++ b/tests/Format/WMTSCapabilities/v1_0_0.html
@@ -45,7 +45,7 @@
}
function test_layers(t) {
- t.plan(37);
+ t.plan(43);
var xml = document.getElementById("ogcsample").firstChild.nodeValue;
var doc = new OpenLayers.Format.XML().read(xml);
@@ -96,6 +96,16 @@
t.eq(layer.resourceUrl.FeatureInfo.template, "http://www.example.com/wmts/coastlines/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}/{J}/{I}.xml",
"resourceUrl.FeatureInfo.template is correct");
+ t.eq(layer.resourceUrls[0].format, "image/png", "resourceUrls[0].format is correct");
+ t.eq(layer.resourceUrls[0].resourceType, "tile", "resourceUrls[0].resourceType is correct");
+ t.eq(layer.resourceUrls[0].template, "http://www.example.com/wmts/coastlines/{TileMatrix}/{TileRow}/{TileCol}.png",
+ "resourceUrls[0].template is correct");
+
+ t.eq(layer.resourceUrls[1].format, "application/gml+xml; version=3.1", "resourceUrls[0].format is correct");
+ t.eq(layer.resourceUrls[1].resourceType, "FeatureInfo", "resourceUrls[0].resourceType is correct");
+ t.eq(layer.resourceUrls[1].template, "http://www.example.com/wmts/coastlines/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}/{J}/{I}.xml",
+ "resourceUrls[0].template is correct");
+
var dimensions = layer.dimensions;
t.eq(dimensions.length, 1, "correct count of dimensions");
t.eq(dimensions[0].title, "Time", "first dimension title is correct");
@@ -140,7 +150,7 @@
}
function test_createLayer(t) {
- t.plan(38);
+ t.plan(41);
var format = new OpenLayers.Format.WMTSCapabilities();
@@ -207,7 +217,8 @@
matrixSet: "21781"
});
t.ok(layer instanceof OpenLayers.Layer.WMTS, "correct instance");
- t.eq(layer.url, "http://wmts.geo.admin.ch/1.0.0/ch.are.agglomerationen_isolierte_staedte-2000/default/{Time}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png", "correct url");
+ t.eq(layer.url[0], "http://wmts.geo.admin.ch/1.0.0/ch.are.agglomerationen_isolierte_staedte-2000/default/{Time}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png", "correct url");
+ t.eq(layer.url[1], "http://wmts1.geo.admin.ch/1.0.0/ch.are.agglomerationen_isolierte_staedte-2000/default/{Time}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png", "correct url");
t.eq(layer.matrixIds.length, 3, "correct matrixIds length");
t.eq(layer.requestEncoding, "REST", "correct requestEncoding");
t.eq(layer.name, "Agglomérations et villes isolées", "correct layer title");
@@ -272,13 +283,15 @@
matrixSet: "21781",
requestEncoding: 'REST'
});
- t.eq(layer.url, "http://wmts.geo.admin.ch/rest", "correct rest url 1");
+ t.eq(layer.url[0], "http://wmts.geo.admin.ch/rest", "correct rest url 1");
+ t.eq(layer.url[1], "http://wmts1.geo.admin.ch/rest", "correct rest url 1");
layer = format.createLayer(caps, {
layer: "ch.are.agglomerationen_isolierte_staedte-2000",
matrixSet: "21781",
requestEncoding: 'KVP'
});
- t.eq(layer.url, "http://wmts.geo.admin.ch/kvp", "correct kvp url 2");
+ t.eq(layer.url[0], "http://wmts.geo.admin.ch/kvp", "correct kvp url 2");
+ t.eq(layer.url[1], "http://wmts1.geo.admin.ch/kvp", "correct kvp url 2");
xml = document.getElementById("multi-getile-2").firstChild.nodeValue;
doc = new OpenLayers.Format.XML().read(xml);
caps = format.read(doc);
@@ -287,13 +300,13 @@
matrixSet: "21781",
requestEncoding: 'REST'
});
- t.eq(layer.url, "http://wmts.geo.admin.ch/rest", "correct rest url 2");
+ t.eq(layer.url[0], "http://wmts.geo.admin.ch/rest", "correct rest url 2");
layer = format.createLayer(caps, {
layer: "ch.are.agglomerationen_isolierte_staedte-2000",
matrixSet: "21781",
requestEncoding: 'KVP'
});
- t.eq(layer.url, "http://wmts.geo.admin.ch/kvp", "correct kvp url 2");
+ t.eq(layer.url[0], "http://wmts.geo.admin.ch/kvp", "correct kvp url 2");
}
function test_parse_projection(t) {
@@ -579,6 +592,7 @@ http://schemas.opengis.net/wmts/1.0/examples/wmtsGetCapabilities_response.xml
21781
+
21781
@@ -793,6 +807,13 @@ http://schemas.opengis.net/wmts/1.0/examples/wmtsGetCapabilities_response.xml
+
+
+
+ REST
+
+
+
@@ -800,6 +821,13 @@ http://schemas.opengis.net/wmts/1.0/examples/wmtsGetCapabilities_response.xml
+
+
+
+ KVP
+
+
+