QGIS API Documentation 3.99.0-Master (2fe06baccd8)
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:
43
47 QgsQuantizedMeshMetadata( const QString &uri,
48 const QgsCoordinateTransformContext &transformContext,
49 QgsError &error );
50
51 bool containsTile( QgsTileXYZ tile ) const;
52 double geometricErrorAtZoom( int zoom ) const;
53
54 QString mAuthCfg;
55 QgsHttpHeaders mHeaders;
56
57 QgsRectangle mExtent;
58 QgsTiledSceneBoundingVolume mBoundingVolume;
59 // Map of zoom level -> list of AABBs of available tiles (tile index ranges)
60 QVector<QVector<QgsTileRange>> mAvailableTiles;
62 QString mTileScheme;
63 uint8_t mMinZoom = 0;
64 uint8_t mMaxZoom = 10;
65 std::vector<QString> mTileUrls;
66 QgsTileMatrix mTileMatrix;
67
68 // The Quantized Mesh TileJSON(-ish) metadata doesn't tell us, so choose something big enough for Earth
69 static const QgsDoubleRange dummyZRange;
70};
71
72class CORE_EXPORT QgsQuantizedMeshIndex : public QgsAbstractTiledSceneIndex
73{
74 public:
75 QgsQuantizedMeshIndex( const QgsQuantizedMeshMetadata &metadata,
76 const QgsCoordinateTransform &wgs84ToCrs )
77 : mMetadata( metadata ), mWgs84ToCrs( wgs84ToCrs ) {}
78 QgsTiledSceneTile rootTile() const override;
79 long long parentTileId( long long id ) const override;
80 QVector< long long > childTileIds( long long id ) const override;
81 QgsTiledSceneTile getTile( long long id ) override;
82 QVector< long long > getTiles( const QgsTiledSceneRequest &request ) override;
83 Qgis::TileChildrenAvailability childAvailability( long long id ) const override;
84 bool fetchHierarchy( long long id, QgsFeedback *feedback = nullptr ) override;
85
86 // Tile ID coding scheme:
87 // From MSb, 2 bits zero, 1 bit one, 5 bits zoom, 28 bits X, 28 bits Y
88 static long long encodeTileId( QgsTileXYZ tile );
89 static QgsTileXYZ decodeTileId( long long id );
90
91 static constexpr long long ROOT_TILE_ID = std::numeric_limits<long long>::max();
92
93 protected:
94 QByteArray fetchContent( const QString &uri, QgsFeedback *feedback = nullptr ) override;
95
96 QgsQuantizedMeshMetadata mMetadata;
97 QgsCoordinateTransform mWgs84ToCrs;
98};
99
100class CORE_EXPORT QgsQuantizedMeshDataProvider: public QgsTiledSceneDataProvider
101{
102 Q_OBJECT
103 public:
104 QgsQuantizedMeshDataProvider( const QString &uri,
105 const QgsDataProvider::ProviderOptions &providerOptions,
107 Qgis::TiledSceneProviderCapabilities capabilities() const override;
108 QgsTiledSceneDataProvider *clone() const override;
109 const QgsCoordinateReferenceSystem sceneCrs() const override;
110 const QgsTiledSceneBoundingVolume &boundingVolume() const override;
111 QgsTiledSceneIndex index() const override;
112 QgsDoubleRange zRange() const override;
113 QgsCoordinateReferenceSystem crs() const override;
114 QgsRectangle extent() const override;
115 bool isValid() const override;
116 QString name() const override;
117 QString description() const override;
118
119 const QgsQuantizedMeshMetadata &quantizedMeshMetadata() const;
120
121 static constexpr const char *providerName = "quantizedmesh";
122 static constexpr const char *providerDescription = "Cesium Quantized Mesh tiles";
123
124 private:
125 QString uriFromIon( const QString &uri );
126
127 private:
128 QString mUri; // For clone()
129 QgsDataProvider::ProviderOptions mProviderOptions; // For clone()
130 bool mIsValid = false;
131 std::optional<QgsQuantizedMeshMetadata> mMetadata; // Initialized in constructor
132 std::optional<QgsTiledSceneIndex> mIndex;
133};
134
135class QgsQuantizedMeshProviderMetadata : public QgsProviderMetadata
136{
137 Q_OBJECT
138
139 public:
140 QgsQuantizedMeshProviderMetadata();
141 QgsDataProvider *createProvider( const QString &uri,
142 const QgsDataProvider::ProviderOptions &providerOptions,
144};
145
QFlags< TiledSceneProviderCapability > TiledSceneProviderCapabilities
Tiled scene data provider capabilities.
Definition qgis.h:5631
QFlags< DataProviderReadFlag > DataProviderReadFlags
Flags which control data provider construction.
Definition qgis.h:486
TileChildrenAvailability
Possible availability states for a tile's children.
Definition qgis.h:5668
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:233
A container for error messages.
Definition qgserror.h:81
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:158
Stores coordinates of a tile in a tile matrix set.
Definition qgstiles.h:39
Represents a bounding volume for a tiled scene.
Base class for data providers for QgsTiledSceneLayer.