Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsvectortilemvtencoder.h 3 : : -------------------------------------- 4 : : Date : April 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 QGSVECTORTILEMVTENCODER_H 17 : : #define QGSVECTORTILEMVTENCODER_H 18 : : 19 : : #define SIP_NO_FILE 20 : : 21 : : #include "qgstiles.h" 22 : : #include "qgsvectortilerenderer.h" 23 : : #include "vector_tile.pb.h" 24 : : 25 : : 26 : : /** 27 : : * \ingroup core 28 : : * \brief Handles conversion of vector features to Mapbox vector tiles encoding. 29 : : * 30 : : * Geometries are stored as a series of MoveTo / LineTo / ClosePath commands 31 : : * with coordinates in integer values (see resolution(), called "extent" in the spec). 32 : : * Attributes are stored as key-value pairs of tags: keys are always strings, values 33 : : * can be integers, floating point numbers, booleans or strings. 34 : : * 35 : : * See the specification for details: 36 : : * https://github.com/mapbox/vector-tile-spec/blob/master/2.1/README.md 37 : : * 38 : : * \since QGIS 3.14 39 : : */ 40 : 0 : class CORE_EXPORT QgsVectorTileMVTEncoder 41 : : { 42 : : public: 43 : : //! Creates MVT encoder for the given tile coordinates 44 : : explicit QgsVectorTileMVTEncoder( QgsTileXYZ tileID ); 45 : : 46 : : //! Returns resolution of coordinates of geometries within the tile. The default is 4096. 47 : : int resolution() const { return mResolution; } 48 : : //! Sets the resolution of coordinates of geometries within the tile 49 : : void setResolution( int extent ) { mResolution = extent; } 50 : : 51 : : //! Returns size of the buffer zone around tile edges in integer tile coordinates. The default is 256 (~6%) 52 : : int tileBuffer() const { return mBuffer; } 53 : : //! Sets size of the buffer zone around tile edges in integer tile coordinates 54 : : void setTileBuffer( int buffer ) { mBuffer = buffer; } 55 : : 56 : : //! Sets coordinate transform context for transforms between layers and tile matrix CRS 57 : 0 : void setTransformContext( const QgsCoordinateTransformContext &transformContext ) { mTransformContext = transformContext; } 58 : : 59 : : /** 60 : : * Fetches data from vector layer for the given tile, does reprojection and clipping 61 : : * 62 : : * Optional feedback object may be provided to support cancellation. 63 : : */ 64 : : void addLayer( QgsVectorLayer *layer, QgsFeedback *feedback = nullptr, QString filterExpression = QString(), QString layerName = QString() ); 65 : : 66 : : //! Encodes MVT using data stored previously with addLayer() calls 67 : : QByteArray encode() const; 68 : : 69 : : private: 70 : : void addFeature( vector_tile::Tile_Layer *tileLayer, const QgsFeature &f ); 71 : : 72 : : private: 73 : : QgsTileXYZ mTileID; 74 : : int mResolution = 4096; 75 : : int mBuffer = 256; 76 : : QgsCoordinateTransformContext mTransformContext; 77 : : 78 : : QgsRectangle mTileExtent; 79 : : 80 : : QgsVectorTileFeatures mFeatures; 81 : : 82 : : vector_tile::Tile tile; 83 : : 84 : : QMap<QVariant, int> mKnownValues; 85 : : 86 : : }; 87 : : 88 : : #endif // QGSVECTORTILEMVTENCODER_H