UNPKG

geoportal-extensions-openlayers

Version:

![GitHub package.json version](https://img.shields.io/github/package-json/v/IGNF/geoportal-extensions?filename=build%2Fscripts%2Frelease%2Fpackage-openlayers.json)

151 lines (133 loc) 6.68 kB
// import openlayers import { get as olGetProj } from "ol/proj"; import TileLayer from "ol/layer/Tile"; // import local import Utils from "../../Common/Utils"; import Config from "../../Common/Utils/Config"; // import local with ol dependencies import SourceWMTS from "./SourceWMTS"; /** * @classdesc * Geoportal LayerWMTS source creation (inherit from ol.layer.Tile) * * @constructor * @extends {ol.layer.Tile} * @alias ol.layer.GeoportalWMTS * @type {ol.layer.GeoportalWMTS} * @param {Object} options - options for function call. * @param {String} options.layer - Layer name (e.g. "ORTHOIMAGERY.ORTHOPHOTOS") * @param {Boolean} [options.ssl] - if set true, enforce protocol https (only for nodejs) * @param {String} [options.apiKey] - Access key to Geoportal platform * @param {Object} [options.olParams] - other options for ol.layer.Tile function (see {@link http://openlayers.org/en/latest/apidoc/ol.layer.Tile.html ol.layer.Tile}) * @param {Object} [options.olParams.sourceParams] - other options for ol.source.WMTS function (see {@link http://openlayers.org/en/latest/apidoc/ol.source.WMTS.html ol.source.WMTS}) * @example * var layerWMTS = new ol.layer.GeoportalWMTS({ * layer : "ORTHOIMAGERY.ORTHOPHOTOS" * }); */ var LayerWMTS = (function (TileLayer) { /** * See {@link ol.layer.GeoportalWMTS} * @module LayerWMTS * @alias module:~Layers/GeoportalWMTS * @param {*} options - options * @example * import LayerWMTS from "src/OpenLayers/Layers/LayerWMTS" */ function LayerWMTS (options) { if (!(this instanceof LayerWMTS)) { throw new TypeError("ERROR CLASS_CONSTRUCTOR"); } if (!options.layer) { throw new Error("ERROR PARAM_MISSING : layer"); } if (typeof options.layer !== "string") { throw new Error("ERROR WRONG TYPE : layer"); } // par defaut if (typeof options.ssl === "undefined") { options.ssl = true; } // Check if configuration is loaded if (!Config.isConfigLoaded()) { throw new Error("ERROR : contract key configuration has to be loaded to load Geoportal layers."); } // création de la source WMTS var olSourceParams; if (options.olParams && options.olParams.sourceParams) { olSourceParams = options.olParams.sourceParams; } var wmtsSource = new SourceWMTS({ layer : options.layer, ssl : options.ssl, apiKey : options.apiKey, olParams : olSourceParams }); var layerTileOptions = { source : wmtsSource }; // si le param layer n'a pas été renseigné lors de la création de la source, // c'est que l'identifiant de la couche n'a pas été trouvé. on passe donc la recherche des paramètres. if (wmtsSource.getLayer() !== undefined) { // récupération des autres paramètres nécessaires à la création de la layer var layerId = Config.configuration.getLayerId(options.layer, "WMTS"); var globalConstraints = Config.configuration.getGlobalConstraints(layerId); if (globalConstraints && globalConstraints.projection) { /* INFO : désactivation temporaire de l'étendue, car certaines étendues (trop grandes ?) provoquent quelques bugs d'affichage (zoom > 16 par exemple) */ // récupération de l'étendue (en EPSG:4326), et reprojection dans la proj de la couche // var geobbox = [ // globalConstraints.extent.left, // globalConstraints.extent.bottom, // globalConstraints.extent.right, // globalConstraints.extent.top // ]; // layerTileOptions.extent = ol.proj.transformExtent(geobbox, "EPSG:4326", globalConstraints.projection); // récupération des résolutions min et max var p; // on récupère tout d'abord la projection if (typeof globalConstraints.projection === "string") { p = olGetProj(globalConstraints.projection); } // puis, selon l'unité de la projection, on calcule la résolution correspondante if (p && p.getUnits()) { if (p.getUnits() === "m") { /* fixme : fix temporaire pour gérer les min/max scaledenominator qui sont arrondis dans la configuration ! * on les arrondit respectivement à l'unité inférieure et supérieure * pour que les couches soient bien disponibles aux niveaux de zoom correspondants */ // info : 1 pixel = 0.00028 m layerTileOptions.minResolution = (globalConstraints.minScale - 1) * 0.00028; layerTileOptions.maxResolution = (globalConstraints.maxScale + 1) * 0.00028; } else if (p.getUnits() === "degrees") { /* fixme : fix temporaire pour gérer les min/max scaledenominator qui sont arrondis dans la configuration ! * on les arrondit respectivement à l'unité inférieure et supérieure * pour que les couches soient bien disponibles aux niveaux de zoom correspondants */ // info : 6378137 * 2 * pi / 360 = rayon de la terre (ellipsoide WGS84) layerTileOptions.minResolution = (globalConstraints.minScale - 1) * 0.00028 * 180 / (Math.PI * 6378137); layerTileOptions.maxResolution = (globalConstraints.maxScale + 1) * 0.00028 * 180 / (Math.PI * 6378137); } } } } // récupération des autres paramètres passés par l'utilisateur Utils.mergeParams(layerTileOptions, options.olParams); // création d'une ol.layer.Tile avec les options récupérées ci-dessus. TileLayer.call(this, layerTileOptions); } // Inherits from ol.layer.Tile if (TileLayer) LayerWMTS.__proto__ = TileLayer; /* * @lends module:LayerWMTS */ LayerWMTS.prototype = Object.create(TileLayer.prototype, {}); /* * Constructor (alias) */ LayerWMTS.prototype.constructor = LayerWMTS; return LayerWMTS; }(TileLayer)); export default LayerWMTS; // Expose LayerWMTS as ol.layerGeoportalWMTS. (for a build bundle) if (window.ol && window.ol.layer) { window.ol.layer.GeoportalWMTS = LayerWMTS; }