QGIS API Documentation 4.0.0-Norrköping (1ddcee3d0e4)
Loading...
Searching...
No Matches
qgsquantizedmeshdataprovider.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsquantizedmeshdataprovider.h
3 --------------------
4 begin : June 2024
5 copyright : (C) 2024 by David Koňařík
6 email : dvdkon at konarici dot cz
7 ******************************************************************
8 ***************************************************************************/
9
10/***************************************************************************
11 * *
12 * This program is free software; you can redistribute it and/or modify *
13 * it under the terms of the GNU General Public License as published by *
14 * the Free Software Foundation; either version 2 of the License, or *
15 * (at your option) any later version. *
16 * *
17 ***************************************************************************/
18
19#pragma once
20
21#include <optional>
22
23#include "qgis.h"
26#include "qgshttpheaders.h"
27#include "qgsprovidermetadata.h"
30#include "qgstiledsceneindex.h"
31#include "qgstiles.h"
32
33#include <qmap.h>
34#include <qvector.h>
35
36#define SIP_NO_FILE
37
39
40class CORE_EXPORT QgsQuantizedMeshMetadata
41{
42 public:
46 QgsQuantizedMeshMetadata( const QString &uri, const QgsCoordinateTransformContext &transformContext, QgsError &error );
47
48 bool containsTile( QgsTileXYZ tile ) const;
49 double geometricErrorAtZoom( int zoom ) const;
50
51 QString mAuthCfg;
52 QgsHttpHeaders mHeaders;
53
54 QgsRectangle mExtent;
55 QgsTiledSceneBoundingVolume mBoundingVolume;
56 // Map of zoom level -> list of AABBs of available tiles (tile index ranges)
57 QVector<QVector<QgsTileRange>> mAvailableTiles;
59 QString mTileScheme;
60 uint8_t mMinZoom = 0;
61 uint8_t mMaxZoom = 10;
62 std::vector<QString> mTileUrls;
63 QgsTileMatrix mTileMatrix;
64
65 // The Quantized Mesh TileJSON(-ish) metadata doesn't tell us, so choose something big enough for Earth
66 static const QgsDoubleRange dummyZRange;
67};
68
69class CORE_EXPORT QgsQuantizedMeshIndex : public QgsAbstractTiledSceneIndex
70{
71 public:
72 QgsQuantizedMeshIndex( const QgsQuantizedMeshMetadata &metadata, const QgsCoordinateTransform &wgs84ToCrs )
73 : mMetadata( metadata )
74 , mWgs84ToCrs( wgs84ToCrs )
75 {}
76 QgsTiledSceneTile rootTile() const override;
77 long long parentTileId( long long id ) const override;
78 QVector< long long > childTileIds( long long id ) const override;
79 QgsTiledSceneTile getTile( long long id ) override;
80 QVector< long long > getTiles( const QgsTiledSceneRequest &request ) override;
81 Qgis::TileChildrenAvailability childAvailability( long long id ) const override;
82 bool fetchHierarchy( long long id, QgsFeedback *feedback = nullptr ) override;
83
84 // Tile ID coding scheme:
85 // From MSb, 2 bits zero, 1 bit one, 5 bits zoom, 28 bits X, 28 bits Y
86 static long long encodeTileId( QgsTileXYZ tile );
87 static QgsTileXYZ decodeTileId( long long id );
88
89 static constexpr long long ROOT_TILE_ID = std::numeric_limits<long long>::max();
90
91 protected:
92 QByteArray fetchContent( const QString &uri, QgsFeedback *feedback = nullptr ) override;
93
94 QgsQuantizedMeshMetadata mMetadata;
95 QgsCoordinateTransform mWgs84ToCrs;
96};
97
98class CORE_EXPORT QgsQuantizedMeshDataProvider : public QgsTiledSceneDataProvider
99{
100 Q_OBJECT
101 public:
102 QgsQuantizedMeshDataProvider( const QString &uri, const QgsDataProvider::ProviderOptions &providerOptions, Qgis::DataProviderReadFlags flags = Qgis::DataProviderReadFlags() );
103 Qgis::TiledSceneProviderCapabilities capabilities() const override;
104 QgsTiledSceneDataProvider *clone() const override;
105 const QgsCoordinateReferenceSystem sceneCrs() const override;
106 const QgsTiledSceneBoundingVolume &boundingVolume() const override;
107 QgsTiledSceneIndex index() const override;
108 QgsDoubleRange zRange() const override;
109 QgsCoordinateReferenceSystem crs() const override;
110 QgsRectangle extent() const override;
111 bool isValid() const override;
112 QString name() const override;
113 QString description() const override;
114
115 const QgsQuantizedMeshMetadata &quantizedMeshMetadata() const;
116
117 static constexpr const char *providerName = "quantizedmesh";
118 static constexpr const char *providerDescription = "Cesium Quantized Mesh tiles";
119
120 private:
121 QString uriFromIon( const QString &uri );
122
123 private:
124 QString mUri; // For clone()
125 QgsDataProvider::ProviderOptions mProviderOptions; // For clone()
126 bool mIsValid = false;
127 std::optional<QgsQuantizedMeshMetadata> mMetadata; // Initialized in constructor
128 std::optional<QgsTiledSceneIndex> mIndex;
129};
130
131class QgsQuantizedMeshProviderMetadata : public QgsProviderMetadata
132{
133 Q_OBJECT
134
135 public:
136 QgsQuantizedMeshProviderMetadata();
137 QgsDataProvider *createProvider( const QString &uri, const QgsDataProvider::ProviderOptions &providerOptions, Qgis::DataProviderReadFlags flags = Qgis::DataProviderReadFlags() ) override;
138};
139
QFlags< TiledSceneProviderCapability > TiledSceneProviderCapabilities
Tiled scene data provider capabilities.
Definition qgis.h:5987
QFlags< DataProviderReadFlag > DataProviderReadFlags
Flags which control data provider construction.
Definition qgis.h:512
TileChildrenAvailability
Possible availability states for a tile's children.
Definition qgis.h:6024
An abstract base class for tiled scene data provider indices.
Represents a coordinate reference system (CRS).
Contains information about the context in which a coordinate transform is executed.
QgsRange which stores a range of double values.
Definition qgsrange.h:217
A container for error messages.
Definition qgserror.h:83
Implements simple HTTP header management.
Holds data provider key, description, and associated shared library file or function pointer informat...
virtual QgsDataProvider * createProvider(const QString &uri, const QgsDataProvider::ProviderOptions &options, Qgis::DataProviderReadFlags flags=Qgis::DataProviderReadFlags())
Class factory to return a pointer to a newly created QgsDataProvider object.
A rectangle specified with double values.
Defines a matrix of tiles for a single zoom level: it is defined by its size (width *.
Definition qgstiles.h:171
Stores coordinates of a tile in a tile matrix set.
Definition qgstiles.h:43
Represents a bounding volume for a tiled scene.
Base class for data providers for QgsTiledSceneLayer.