1 /***************************************************************************
2   qgsvectortilemvtdecoder.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 QGSVECTORTILEMVTDECODER_H
17 #define QGSVECTORTILEMVTDECODER_H
18 
19 #define SIP_NO_FILE
20 
21 class QgsFeature;
22 
23 #include <QStringList>
24 #include <QMap>
25 
26 #include "vector_tile.pb.h"
27 
28 #include "qgsvectortilerenderer.h"
29 
30 /**
31  * \ingroup core
32  * \brief This class is responsible for decoding raw tile data written with Mapbox Vector Tiles encoding.
33  *
34  * \since QGIS 3.14
35  */
36 class CORE_EXPORT QgsVectorTileMVTDecoder
37 {
38   public:
39     QgsVectorTileMVTDecoder();
40     ~QgsVectorTileMVTDecoder();
41 
42     //! Tries to decode raw tile data, returns true on success
43     bool decode( QgsTileXYZ tileID, const QByteArray &rawTileData );
44 
45     //! Returns a list of sub-layer names in a tile. It can only be called after a successful decode()
46     QStringList layers() const;
47 
48     //! Returns a list of all field names in a tile. It can only be called after a successful decode()
49     QStringList layerFieldNames( const QString &layerName ) const;
50 
51     /**
52      * Returns decoded features grouped by sub-layers. It can only be called after a successful decode()
53      *
54      * If \a layerSubset is specified then only features from the specified layers will be returned.
55      */
56     QgsVectorTileFeatures layerFeatures( const QMap<QString, QgsFields> &perLayerFields, const QgsCoordinateTransform &ct,
57                                          const QSet< QString > *layerSubset = nullptr ) const;
58 
59   private:
60     vector_tile::Tile tile;
61     QgsTileXYZ mTileID;
62     QMap<QString, int> mLayerNameToIndex;
63 };
64 
65 #endif // QGSVECTORTILEMVTDECODER_H
66