/* Copyright (c) 2015-present The Open Source Geospatial Foundation
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* A serializer for layers that have an `ol.source.WMTS` source.
*
* This class is heavily inspired by the excellent `ngeo` Print service class:
* [camptocamp/ngeo](https://github.com/camptocamp/ngeo).
*
* @class GeoExt.data.serializer.WMTS
*/
Ext.define(
'GeoExt.data.serializer.WMTS',
{
extend: 'GeoExt.data.serializer.Base',
mixins: ['GeoExt.mixin.SymbolCheck'],
// <debug>
symbols: [
'ol.proj.Projection#getMetersPerUnit',
'ol.size.toSize',
'ol.source.WMTS',
'ol.source.WMTS#getDimensions',
'ol.source.WMTS#getFormat',
'ol.source.WMTS#getLayer',
'ol.source.WMTS#getMatrixSet',
'ol.source.WMTS#getProjection',
'ol.source.WMTS#getRequestEncoding',
'ol.source.WMTS#getStyle',
'ol.source.WMTS#getTileGrid',
'ol.source.WMTS#getUrls',
'ol.source.WMTS#getVersion',
'ol.tilegrid.WMTS#getMatrixIds',
'ol.tilegrid.WMTS#getOrigin',
'ol.tilegrid.WMTS#getResolution',
],
// </debug>
inheritableStatics: {
/**
* @inheritdoc
*/
sourceCls: ol.source.WMTS,
/**
* @inheritdoc
*/
serialize: function (layer, source) {
this.validateSource(source);
const projection = source.getProjection();
const tileGrid = source.getTileGrid();
const dimensions = source.getDimensions();
const dimensionKeys = Ext.Object.getKeys(dimensions);
const matrixIds = tileGrid.getMatrixIds();
const matrices = [];
Ext.each(matrixIds, function (matrix, idx) {
const sqrZ = Math.pow(2, idx);
matrices.push({
identifier: matrix,
scaleDenominator:
(tileGrid.getResolution(idx) * projection.getMetersPerUnit()) /
0.28e-3,
tileSize: ol.size.toSize(tileGrid.getTileSize(idx)),
topLeftCorner: tileGrid.getOrigin(idx),
matrixSize: [sqrZ, sqrZ],
});
});
const serialized = {
baseURL: source.getUrls()[0],
dimensions: dimensionKeys,
dimensionParams: dimensions,
imageFormat: source.getFormat(),
layer: source.getLayer(),
matrices: matrices,
matrixSet: source.getMatrixSet(),
opacity: layer.getOpacity(),
requestEncoding: source.getRequestEncoding(),
style: source.getStyle(),
type: 'WMTS',
version: source.getVersion(),
};
return serialized;
},
},
},
function (cls) {
// Register this serializer via the inherited method `register`.
cls.register(cls);
},
);