improve createLayer from WMTS Capabilities
This commit is contained in:
committed by
Stéphane Brunner
parent
da67953c61
commit
a662f82a1b
@@ -6,27 +6,27 @@
|
|||||||
/**
|
/**
|
||||||
* @requires OpenLayers/Format/XML/VersionedOGC.js
|
* @requires OpenLayers/Format/XML/VersionedOGC.js
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class: OpenLayers.Format.WMTSCapabilities
|
* Class: OpenLayers.Format.WMTSCapabilities
|
||||||
* Read WMTS Capabilities.
|
* Read WMTS Capabilities.
|
||||||
*
|
*
|
||||||
* Inherits from:
|
* Inherits from:
|
||||||
* - <OpenLayers.Format.XML.VersionedOGC>
|
* - <OpenLayers.Format.XML.VersionedOGC>
|
||||||
*/
|
*/
|
||||||
OpenLayers.Format.WMTSCapabilities = OpenLayers.Class(OpenLayers.Format.XML.VersionedOGC, {
|
OpenLayers.Format.WMTSCapabilities = OpenLayers.Class(OpenLayers.Format.XML.VersionedOGC, {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* APIProperty: defaultVersion
|
* APIProperty: defaultVersion
|
||||||
* {String} Version number to assume if none found. Default is "1.0.0".
|
* {String} Version number to assume if none found. Default is "1.0.0".
|
||||||
*/
|
*/
|
||||||
defaultVersion: "1.0.0",
|
defaultVersion: "1.0.0",
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* APIProperty: yx
|
* APIProperty: yx
|
||||||
* {Object} Members in the yx object are used to determine if a CRS URN
|
* {Object} Members in the yx object are used to determine if a CRS URN
|
||||||
* corresponds to a CRS with y,x axis order. Member names are CRS URNs
|
* corresponds to a CRS with y,x axis order. Member names are CRS URNs
|
||||||
* and values are boolean. By default, the following CRS URN are
|
* and values are boolean. By default, the following CRS URN are
|
||||||
* assumed to correspond to a CRS with y,x axis order:
|
* assumed to correspond to a CRS with y,x axis order:
|
||||||
*
|
*
|
||||||
* * urn:ogc:def:crs:EPSG::4326
|
* * urn:ogc:def:crs:EPSG::4326
|
||||||
@@ -48,8 +48,8 @@ OpenLayers.Format.WMTSCapabilities = OpenLayers.Class(OpenLayers.Format.XML.Vers
|
|||||||
* APIMethod: read
|
* APIMethod: read
|
||||||
* Read capabilities data from a string, and return information about
|
* Read capabilities data from a string, and return information about
|
||||||
* the service (offering and observedProperty mostly).
|
* the service (offering and observedProperty mostly).
|
||||||
*
|
*
|
||||||
* Parameters:
|
* Parameters:
|
||||||
* data - {String} or {DOMElement} data to read/parse.
|
* data - {String} or {DOMElement} data to read/parse.
|
||||||
*
|
*
|
||||||
* Returns:
|
* Returns:
|
||||||
@@ -61,36 +61,34 @@ OpenLayers.Format.WMTSCapabilities = OpenLayers.Class(OpenLayers.Format.XML.Vers
|
|||||||
* Create a WMTS layer given a capabilities object.
|
* Create a WMTS layer given a capabilities object.
|
||||||
*
|
*
|
||||||
* Parameters:
|
* Parameters:
|
||||||
* capabilities - {Object} The object returned from a <read> call to this
|
* capabilities - {Object} The object returned from a <read> call to this
|
||||||
* format.
|
* format.
|
||||||
* config - {Object} Configuration properties for the layer. Defaults for
|
* config - {Object} Configuration properties for the layer. Defaults for
|
||||||
* the layer will apply if not provided.
|
* the layer will apply if not provided.
|
||||||
*
|
*
|
||||||
* Required config properties:
|
* Required config properties:
|
||||||
* layer - {String} The layer identifier.
|
* layer - {String} The layer identifier.
|
||||||
* matrixSet - {String} The matrix set identifier.
|
*
|
||||||
|
* Optional config properties:
|
||||||
|
* 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
|
||||||
|
* param - {Object} The dimensions values eg: {"Year": "2012"}
|
||||||
*
|
*
|
||||||
* Returns:
|
* Returns:
|
||||||
* {<OpenLayers.Layer.WMTS>} A properly configured WMTS layer. Throws an
|
* {<OpenLayers.Layer.WMTS>} A properly configured WMTS layer. Throws an
|
||||||
* error if an incomplete config is provided. Returns undefined if no
|
* error if an incomplete config is provided. Returns undefined if no
|
||||||
* layer could be created with the provided config.
|
* layer could be created with the provided config.
|
||||||
*/
|
*/
|
||||||
createLayer: function(capabilities, config) {
|
createLayer: function(capabilities, config) {
|
||||||
var layer;
|
var layer;
|
||||||
|
|
||||||
// confirm required properties are supplied in config
|
// confirm required properties are supplied in config
|
||||||
var required = {
|
if (!('layer' in config)) {
|
||||||
layer: true,
|
throw new Error("Missing property 'layer' in configuration.");
|
||||||
matrixSet: true
|
|
||||||
};
|
|
||||||
for (var prop in required) {
|
|
||||||
if (!(prop in config)) {
|
|
||||||
throw new Error("Missing property '" + prop + "' in layer configuration.");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var contents = capabilities.contents;
|
var contents = capabilities.contents;
|
||||||
var matrixSet = contents.tileMatrixSets[config.matrixSet];
|
|
||||||
|
|
||||||
// find the layer definition with the given identifier
|
// find the layer definition with the given identifier
|
||||||
var layers = contents.layers;
|
var layers = contents.layers;
|
||||||
@@ -101,32 +99,97 @@ OpenLayers.Format.WMTSCapabilities = OpenLayers.Class(OpenLayers.Format.XML.Vers
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!layerDef) {
|
||||||
if (layerDef && matrixSet) {
|
throw new Error("Layer not found");
|
||||||
// get the default style for the layer
|
}
|
||||||
var style;
|
|
||||||
for (var i=0, ii=layerDef.styles.length; i<ii; ++i) {
|
// find the matrixSet definition
|
||||||
style = layerDef.styles[i];
|
var matrixSet;
|
||||||
if (style.isDefault) {
|
if (config.matrixSet) {
|
||||||
break;
|
matrixSet = contents.tileMatrixSets[config.matrixSet];
|
||||||
|
} else if (layerDef.tileMatrixSetLinks.length == 1) {
|
||||||
|
matrixSet = contents.tileMatrixSets[
|
||||||
|
layerDef.tileMatrixSetLinks[0].tileMatrixSet];
|
||||||
|
}
|
||||||
|
if (!matrixSet) {
|
||||||
|
throw new Error("matrixSet not found");
|
||||||
|
}
|
||||||
|
|
||||||
|
// get the default style for the layer
|
||||||
|
var style;
|
||||||
|
for (var i=0, ii=layerDef.styles.length; i<ii; ++i) {
|
||||||
|
style = layerDef.styles[i];
|
||||||
|
if (style.isDefault) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var requestEncoding = config.requestEncoding;
|
||||||
|
if (!requestEncoding) {
|
||||||
|
requestEncoding = "KVP";
|
||||||
|
if (capabilities.operationsMetadata.GetTile.dcp.http) {
|
||||||
|
var http = capabilities.operationsMetadata.GetTile.dcp.http;
|
||||||
|
// Get first get method
|
||||||
|
if (http.get[0].constraints) {
|
||||||
|
var constraints = http.get[0].constraints;
|
||||||
|
if (!constraints.GetEncoding.allowedValues.KVP &&
|
||||||
|
constraints.GetEncoding.allowedValues.REST) {
|
||||||
|
requestEncoding = "REST";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
layer = new OpenLayers.Layer.WMTS(
|
|
||||||
OpenLayers.Util.applyDefaults(config, {
|
|
||||||
url: config.requestEncoding === "REST" && layerDef.resourceUrl ?
|
|
||||||
layerDef.resourceUrl.tile.template :
|
|
||||||
capabilities.operationsMetadata.GetTile.dcp.http.get[0].url,
|
|
||||||
name: layerDef.title,
|
|
||||||
style: style.identifier,
|
|
||||||
matrixIds: matrixSet.matrixIds,
|
|
||||||
tileFullExtent: matrixSet.bounds
|
|
||||||
})
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
return layer;
|
|
||||||
|
var dimensions = [];
|
||||||
|
var params = config.params || {};
|
||||||
|
// to don't overwrite the changes in the applyDefaults
|
||||||
|
delete config.params;
|
||||||
|
for (var id = 0, ld = layerDef.dimensions.length ; id < ld ; id++) {
|
||||||
|
var dimension = layerDef.dimensions[id];
|
||||||
|
dimensions.push(dimension.identifier);
|
||||||
|
if (!params.hasOwnProperty(dimension.identifier)) {
|
||||||
|
params[dimension.identifier] = dimension['default'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var projection = config.projection || matrixSet.supportedCRS.replace(
|
||||||
|
/urn:ogc:def:crs:(\w+):.+:(\w+)$/, "$1:$2");
|
||||||
|
var units = config.units ||
|
||||||
|
projection === "EPSG:4326" ? "degrees" : "m"
|
||||||
|
|
||||||
|
var resolutions = [];
|
||||||
|
if (config.isBaseLayer !== false) {
|
||||||
|
for (mid in matrixSet.matrixIds) {
|
||||||
|
if (matrixSet.matrixIds.hasOwnProperty(mid)) {
|
||||||
|
resolutions.push(
|
||||||
|
matrixSet.matrixIds[mid].scaleDenominator * 0.28E-3
|
||||||
|
/ OpenLayers.METERS_PER_INCH
|
||||||
|
/ OpenLayers.INCHES_PER_UNIT[units]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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,
|
||||||
|
requestEncoding: requestEncoding,
|
||||||
|
name: layerDef.title,
|
||||||
|
style: style.identifier,
|
||||||
|
matrixIds: matrixSet.matrixIds,
|
||||||
|
matrixSet: matrixSet.identifier,
|
||||||
|
projection: projection,
|
||||||
|
units: units,
|
||||||
|
resolutions: config.isBaseLayer === false ? undefined :
|
||||||
|
resolutions,
|
||||||
|
tileFullExtent: matrixSet.bounds,
|
||||||
|
dimensions: dimensions,
|
||||||
|
params: params
|
||||||
|
})
|
||||||
|
);
|
||||||
},
|
},
|
||||||
|
|
||||||
CLASS_NAME: "OpenLayers.Format.WMTSCapabilities"
|
CLASS_NAME: "OpenLayers.Format.WMTSCapabilities"
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -106,6 +106,7 @@ OpenLayers.Layer.WMTS = OpenLayers.Class(OpenLayers.Layer.Grid, {
|
|||||||
*
|
*
|
||||||
* Matrix properties:
|
* Matrix properties:
|
||||||
* identifier - {String} The matrix identifier (required).
|
* identifier - {String} The matrix identifier (required).
|
||||||
|
* scaleDenominator - {Number} The matrix scale denominator.
|
||||||
* topLeftCorner - {<OpenLayers.LonLat>} The top left corner of the
|
* topLeftCorner - {<OpenLayers.LonLat>} The top left corner of the
|
||||||
* matrix. Must be provided if different than the layer <tileOrigin>.
|
* matrix. Must be provided if different than the layer <tileOrigin>.
|
||||||
* tileWidth - {Number} The tile width for the matrix. Must be provided
|
* tileWidth - {Number} The tile width for the matrix. Must be provided
|
||||||
|
|||||||
Reference in New Issue
Block a user