Merge pull request #695 from ahocevar/wmts
Support for multiple resource urls for WMTS. r=@sbrunner
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
OpenLayers.ProxyHost = "/proxy/?url=";
|
OpenLayers.ProxyHost = "proxy.cgi/?url=";
|
||||||
|
|
||||||
var map, format;
|
var map, format;
|
||||||
|
|
||||||
|
|||||||
@@ -73,6 +73,8 @@ OpenLayers.Format.WMTSCapabilities = OpenLayers.Class(OpenLayers.Format.XML.Vers
|
|||||||
* matrixSet - {String} The matrix set identifier, required if there is
|
* matrixSet - {String} The matrix set identifier, required if there is
|
||||||
* more than one matrix set in the layer capabilities.
|
* more than one matrix set in the layer capabilities.
|
||||||
* style - {String} The name of the style
|
* 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"}
|
* param - {Object} The dimensions values eg: {"Year": "2012"}
|
||||||
*
|
*
|
||||||
* Returns:
|
* Returns:
|
||||||
@@ -102,6 +104,11 @@ OpenLayers.Format.WMTSCapabilities = OpenLayers.Class(OpenLayers.Format.XML.Vers
|
|||||||
if (!layerDef) {
|
if (!layerDef) {
|
||||||
throw new Error("Layer not found");
|
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
|
// find the matrixSet definition
|
||||||
var matrixSet;
|
var matrixSet;
|
||||||
@@ -170,17 +177,26 @@ OpenLayers.Format.WMTSCapabilities = OpenLayers.Class(OpenLayers.Format.XML.Vers
|
|||||||
}
|
}
|
||||||
|
|
||||||
var url;
|
var url;
|
||||||
if (requestEncoding === "REST" && layerDef.resourceUrl) {
|
if (requestEncoding === "REST" && layerDef.resourceUrls) {
|
||||||
url = layerDef.resourceUrl.tile.template;
|
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 {
|
else {
|
||||||
var httpGet = capabilities.operationsMetadata.GetTile.dcp.http.get;
|
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++) {
|
for (var i = 0, ii = httpGet.length; i < ii; i++) {
|
||||||
if (httpGet[i].constraints && httpGet[i].constraints.
|
constraint = httpGet[i].constraints;
|
||||||
GetEncoding.allowedValues[requestEncoding]) {
|
if (!constraint || (constraint && constraint.
|
||||||
url = httpGet[i].url;
|
GetEncoding.allowedValues[requestEncoding])) {
|
||||||
break;
|
url.push(httpGet[i].url);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -191,6 +207,7 @@ OpenLayers.Format.WMTSCapabilities = OpenLayers.Class(OpenLayers.Format.XML.Vers
|
|||||||
requestEncoding: requestEncoding,
|
requestEncoding: requestEncoding,
|
||||||
name: layerDef.title,
|
name: layerDef.title,
|
||||||
style: style.identifier,
|
style: style.identifier,
|
||||||
|
format: format,
|
||||||
matrixIds: matrixSet.matrixIds,
|
matrixIds: matrixSet.matrixIds,
|
||||||
matrixSet: matrixSet.identifier,
|
matrixSet: matrixSet.identifier,
|
||||||
projection: projection,
|
projection: projection,
|
||||||
|
|||||||
@@ -195,10 +195,16 @@ OpenLayers.Format.WMTSCapabilities.v1_0_0 = OpenLayers.Class(
|
|||||||
},
|
},
|
||||||
"ResourceURL": function(node, obj) {
|
"ResourceURL": function(node, obj) {
|
||||||
obj.resourceUrl = obj.resourceUrl || {};
|
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"),
|
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
|
// not used for now, can be added in the future though
|
||||||
/*"Themes": function(node, obj) {
|
/*"Themes": function(node, obj) {
|
||||||
|
|||||||
@@ -45,7 +45,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function test_layers(t) {
|
function test_layers(t) {
|
||||||
t.plan(37);
|
t.plan(43);
|
||||||
var xml = document.getElementById("ogcsample").firstChild.nodeValue;
|
var xml = document.getElementById("ogcsample").firstChild.nodeValue;
|
||||||
var doc = new OpenLayers.Format.XML().read(xml);
|
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",
|
t.eq(layer.resourceUrl.FeatureInfo.template, "http://www.example.com/wmts/coastlines/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}/{J}/{I}.xml",
|
||||||
"resourceUrl.FeatureInfo.template is correct");
|
"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;
|
var dimensions = layer.dimensions;
|
||||||
t.eq(dimensions.length, 1, "correct count of dimensions");
|
t.eq(dimensions.length, 1, "correct count of dimensions");
|
||||||
t.eq(dimensions[0].title, "Time", "first dimension title is correct");
|
t.eq(dimensions[0].title, "Time", "first dimension title is correct");
|
||||||
@@ -140,7 +150,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function test_createLayer(t) {
|
function test_createLayer(t) {
|
||||||
t.plan(38);
|
t.plan(41);
|
||||||
|
|
||||||
var format = new OpenLayers.Format.WMTSCapabilities();
|
var format = new OpenLayers.Format.WMTSCapabilities();
|
||||||
|
|
||||||
@@ -207,7 +217,8 @@
|
|||||||
matrixSet: "21781"
|
matrixSet: "21781"
|
||||||
});
|
});
|
||||||
t.ok(layer instanceof OpenLayers.Layer.WMTS, "correct instance");
|
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.matrixIds.length, 3, "correct matrixIds length");
|
||||||
t.eq(layer.requestEncoding, "REST", "correct requestEncoding");
|
t.eq(layer.requestEncoding, "REST", "correct requestEncoding");
|
||||||
t.eq(layer.name, "Agglomérations et villes isolées", "correct layer title");
|
t.eq(layer.name, "Agglomérations et villes isolées", "correct layer title");
|
||||||
@@ -272,13 +283,15 @@
|
|||||||
matrixSet: "21781",
|
matrixSet: "21781",
|
||||||
requestEncoding: 'REST'
|
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 = format.createLayer(caps, {
|
||||||
layer: "ch.are.agglomerationen_isolierte_staedte-2000",
|
layer: "ch.are.agglomerationen_isolierte_staedte-2000",
|
||||||
matrixSet: "21781",
|
matrixSet: "21781",
|
||||||
requestEncoding: 'KVP'
|
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;
|
xml = document.getElementById("multi-getile-2").firstChild.nodeValue;
|
||||||
doc = new OpenLayers.Format.XML().read(xml);
|
doc = new OpenLayers.Format.XML().read(xml);
|
||||||
caps = format.read(doc);
|
caps = format.read(doc);
|
||||||
@@ -287,13 +300,13 @@
|
|||||||
matrixSet: "21781",
|
matrixSet: "21781",
|
||||||
requestEncoding: 'REST'
|
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 = format.createLayer(caps, {
|
||||||
layer: "ch.are.agglomerationen_isolierte_staedte-2000",
|
layer: "ch.are.agglomerationen_isolierte_staedte-2000",
|
||||||
matrixSet: "21781",
|
matrixSet: "21781",
|
||||||
requestEncoding: 'KVP'
|
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) {
|
function test_parse_projection(t) {
|
||||||
@@ -579,6 +592,7 @@ http://schemas.opengis.net/wmts/1.0/examples/wmtsGetCapabilities_response.xml
|
|||||||
<TileMatrixSet>21781</TileMatrixSet>
|
<TileMatrixSet>21781</TileMatrixSet>
|
||||||
</TileMatrixSetLink>
|
</TileMatrixSetLink>
|
||||||
<ResourceURL format="image/png" resourceType="tile" template="http://wmts.geo.admin.ch/1.0.0/ch.are.agglomerationen_isolierte_staedte-2000/default/{Time}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png"/>
|
<ResourceURL format="image/png" resourceType="tile" template="http://wmts.geo.admin.ch/1.0.0/ch.are.agglomerationen_isolierte_staedte-2000/default/{Time}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png"/>
|
||||||
|
<ResourceURL format="image/png" resourceType="tile" template="http://wmts1.geo.admin.ch/1.0.0/ch.are.agglomerationen_isolierte_staedte-2000/default/{Time}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png"/>
|
||||||
</Layer>
|
</Layer>
|
||||||
<TileMatrixSet>
|
<TileMatrixSet>
|
||||||
<ows:Identifier>21781</ows:Identifier>
|
<ows:Identifier>21781</ows:Identifier>
|
||||||
@@ -793,6 +807,13 @@ http://schemas.opengis.net/wmts/1.0/examples/wmtsGetCapabilities_response.xml
|
|||||||
</ows:AllowedValues>
|
</ows:AllowedValues>
|
||||||
</ows:Constraint>
|
</ows:Constraint>
|
||||||
</ows:Get>
|
</ows:Get>
|
||||||
|
<ows:Get xlink:href="http://wmts1.geo.admin.ch/rest">
|
||||||
|
<ows:Constraint name="GetEncoding">
|
||||||
|
<ows:AllowedValues>
|
||||||
|
<ows:Value>REST</ows:Value>
|
||||||
|
</ows:AllowedValues>
|
||||||
|
</ows:Constraint>
|
||||||
|
</ows:Get>
|
||||||
<ows:Get xlink:href="http://wmts.geo.admin.ch/kvp">
|
<ows:Get xlink:href="http://wmts.geo.admin.ch/kvp">
|
||||||
<ows:Constraint name="GetEncoding">
|
<ows:Constraint name="GetEncoding">
|
||||||
<ows:AllowedValues>
|
<ows:AllowedValues>
|
||||||
@@ -800,6 +821,13 @@ http://schemas.opengis.net/wmts/1.0/examples/wmtsGetCapabilities_response.xml
|
|||||||
</ows:AllowedValues>
|
</ows:AllowedValues>
|
||||||
</ows:Constraint>
|
</ows:Constraint>
|
||||||
</ows:Get>
|
</ows:Get>
|
||||||
|
<ows:Get xlink:href="http://wmts1.geo.admin.ch/kvp">
|
||||||
|
<ows:Constraint name="GetEncoding">
|
||||||
|
<ows:AllowedValues>
|
||||||
|
<ows:Value>KVP</ows:Value>
|
||||||
|
</ows:AllowedValues>
|
||||||
|
</ows:Constraint>
|
||||||
|
</ows:Get>
|
||||||
</ows:HTTP>
|
</ows:HTTP>
|
||||||
</ows:DCP>
|
</ows:DCP>
|
||||||
</ows:Operation>
|
</ows:Operation>
|
||||||
|
|||||||
Reference in New Issue
Block a user