UNPKG

@geoext/geoext

Version:

GeoExt is Open Source and enables building desktop-like GIS applications through the web. It is a JavaScript framework that combines the GIS functionality of OpenLayers with the user interface savvy of the ExtJS library provided by Sencha.

106 lines (99 loc) 3.38 kB
/* 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); }, );