diff --git a/lib/OpenLayers/Format/WMTSCapabilities.js b/lib/OpenLayers/Format/WMTSCapabilities.js index 6b38b1c0b3..b8b667437f 100644 --- a/lib/OpenLayers/Format/WMTSCapabilities.js +++ b/lib/OpenLayers/Format/WMTSCapabilities.js @@ -169,11 +169,25 @@ OpenLayers.Format.WMTSCapabilities = OpenLayers.Class(OpenLayers.Format.XML.Vers } } + var url; + if (requestEncoding === "REST" && layerDef.resourceUrl) { + url = layerDef.resourceUrl.tile.template; + } + else { + var httpGet = capabilities.operationsMetadata.GetTile.dcp.http.get; + url = httpGet[0].url; + 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; + } + } + } + return new OpenLayers.Layer.WMTS( OpenLayers.Util.applyDefaults(config, { - url: requestEncoding === "REST" && layerDef.resourceUrl ? - layerDef.resourceUrl.tile.template : - capabilities.operationsMetadata.GetTile.dcp.http.get[0].url, + url: url, requestEncoding: requestEncoding, name: layerDef.title, style: style.identifier, diff --git a/tests/Format/WMTSCapabilities/v1_0_0.html b/tests/Format/WMTSCapabilities/v1_0_0.html index cb4b55c7d9..9017e0ed71 100644 --- a/tests/Format/WMTSCapabilities/v1_0_0.html +++ b/tests/Format/WMTSCapabilities/v1_0_0.html @@ -140,7 +140,7 @@ } function test_createLayer(t) { - t.plan(34); + t.plan(38); var format = new OpenLayers.Format.WMTSCapabilities(); @@ -261,6 +261,39 @@ }); t.eq(layer.projection.getCode(), "EPSG:900913", "correct projection"); t.eq(layer.units, "degrees", "correct units"); + + + // test get the right url #608/3 + xml = document.getElementById("multi-getile-1").firstChild.nodeValue; + doc = new OpenLayers.Format.XML().read(xml); + caps = format.read(doc); + layer = format.createLayer(caps, { + layer: "ch.are.agglomerationen_isolierte_staedte-2000", + matrixSet: "21781", + requestEncoding: 'REST' + }); + t.eq(layer.url, "http://wmts.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"); + xml = document.getElementById("multi-getile-2").firstChild.nodeValue; + doc = new OpenLayers.Format.XML().read(xml); + caps = format.read(doc); + layer = format.createLayer(caps, { + layer: "ch.are.agglomerationen_isolierte_staedte-2000", + matrixSet: "21781", + requestEncoding: 'REST' + }); + t.eq(layer.url, "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"); } function test_parse_projection(t) { @@ -733,5 +766,167 @@ http://schemas.opengis.net/wmts/1.0/examples/wmtsGetCapabilities_response.xml --> +
+ + +