1 /*************************************************************************** 2 qgsvectortileutils.h 3 -------------------------------------- 4 Date : March 2020 5 Copyright : (C) 2020 by Martin Dobias 6 Email : wonder dot sk at gmail dot com 7 *************************************************************************** 8 * * 9 * This program is free software; you can redistribute it and/or modify * 10 * it under the terms of the GNU General Public License as published by * 11 * the Free Software Foundation; either version 2 of the License, or * 12 * (at your option) any later version. * 13 * * 14 ***************************************************************************/ 15 16 #ifndef QGSVECTORTILEUTILS_H 17 #define QGSVECTORTILEUTILS_H 18 19 #include "qgis_core.h" 20 21 #define SIP_NO_FILE 22 23 #include <QSet> 24 25 class QPointF; 26 class QPolygon; 27 28 class QgsCoordinateTransform; 29 class QgsFields; 30 class QgsMapToPixel; 31 class QgsRectangle; 32 class QgsVectorLayer; 33 34 class QgsTileMatrix; 35 class QgsTileRange; 36 class QgsTileXYZ; 37 class QgsVectorTileLayer; 38 39 /** 40 * \ingroup core 41 * \brief Random utility functions for working with vector tiles 42 * 43 * \since QGIS 3.14 44 */ 45 class CORE_EXPORT QgsVectorTileUtils 46 { 47 public: 48 49 //! Returns a list of tiles in the given tile range 50 static QVector<QgsTileXYZ> tilesInRange( const QgsTileRange &range, int zoomLevel ); 51 //! Orders tile requests according to the distance from view center (given in tile matrix coords) 52 static void sortTilesByDistanceFromCenter( QVector<QgsTileXYZ> &tiles, const QPointF ¢er ); 53 54 /** 55 * Returns polygon (made by four corners of the tile) in screen coordinates 56 * 57 * \throws QgsCsException 58 */ 59 static QPolygon tilePolygon( QgsTileXYZ id, const QgsCoordinateTransform &ct, const QgsTileMatrix &tm, const QgsMapToPixel &mtp ); 60 61 //! Returns QgsFields instance based on the set of field names 62 static QgsFields makeQgisFields( QSet<QString> flds ); 63 64 /** 65 * Finds zoom level (assuming GoogleCRS84Quad tile matrix set) given map scale denominator. 66 * 67 * \since QGIS 3.16 68 */ 69 static double scaleToZoom( double mapScale ); 70 71 //! Finds best fitting zoom level (assuming GoogleCRS84Quad tile matrix set) given map scale denominator and allowed zoom level range 72 static int scaleToZoomLevel( double mapScale, int sourceMinZoom, int sourceMaxZoom ); 73 //! Returns a temporary vector layer for given sub-layer of tile in vector tile layer 74 static QgsVectorLayer *makeVectorLayerForTile( QgsVectorTileLayer *mvt, QgsTileXYZ tileID, const QString &layerName ); 75 //! Returns formatted tile URL string replacing {x}, {y}, {z} placeholders (or {-y} instead of {y} for TMS convention) 76 static QString formatXYZUrlTemplate( const QString &url, QgsTileXYZ tile, const QgsTileMatrix &tileMatrix ); 77 //! Checks whether the URL template string is correct (contains {x}, {y} / {-y}, {z} placeholders) 78 static bool checkXYZUrlTemplate( const QString &url ); 79 }; 80 81 #endif // QGSVECTORTILEUTILS_H 82