33  const QVariantMap tileInfo = json.value( QStringLiteral( 
"tileInfo" ) ).toMap();
 
   35  const QVariantMap origin = tileInfo.value( QStringLiteral( 
"origin" ) ).toMap();
 
   36  const double originX = origin.value( QStringLiteral( 
"x" ) ).toDouble();
 
   37  const double originY = origin.value( QStringLiteral( 
"y" ) ).toDouble();
 
   39  const int rows = tileInfo.value( QStringLiteral( 
"rows" ), QStringLiteral( 
"512" ) ).toInt();
 
   40  const int cols = tileInfo.value( QStringLiteral( 
"cols" ), QStringLiteral( 
"512" ) ).toInt();
 
   43    QgsDebugError( QStringLiteral( 
"row/col size mismatch: %1 vs %2 - tile misalignment may occur" ).arg( rows ).arg( cols ) );
 
   48  const QVariantList lodList = tileInfo.value( QStringLiteral( 
"lods" ) ).toList();
 
   49  bool foundLevel0 = 
false;
 
   50  double z0Dimension = 0;
 
   52  for ( 
const QVariant &lod : lodList )
 
   54    const QVariantMap lodMap = lod.toMap();
 
   55    const int level = lodMap.value( QStringLiteral( 
"level" ) ).toInt();
 
   58      z0Dimension = lodMap.value( QStringLiteral( 
"resolution" ) ).toDouble() * rows;
 
   67  for ( 
const QVariant &lod : lodList )
 
   69    const QVariantMap lodMap = lod.toMap();
 
   70    const int level = lodMap.value( QStringLiteral( 
"level" ) ).toInt();
 
   79    tm.
setScale( lodMap.value( QStringLiteral( 
"scale" ) ).toDouble() );
 
   85  const QVariantList tileMap = rootTileMap.value( QStringLiteral( 
"index" ) ).toList();
 
   86  if ( !tileMap.isEmpty() )
 
  126      std::vector< QgsTileXYZ > bottomToTopQueue;
 
  127      bottomToTopQueue.reserve( 
id.zoomLevel() );
 
  133      for ( 
int zoomLevel = 
id.zoomLevel(); zoomLevel > 0; zoomLevel-- )
 
  135        bottomToTopQueue.emplace_back( 
QgsTileXYZ( column, row, zoomLevel ) );
 
  142      QVariantList node = tileMap;
 
  143      for ( 
int index = 
static_cast<int>( bottomToTopQueue.size() ) - 1; index >= 0; --index )
 
  145        const QgsTileXYZ &tile = bottomToTopQueue[ index ];
 
  146        int childColumn = tile.
column() - column;
 
  147        int childRow = tile.
row() - row;
 
  149        if ( childColumn == 1 && childRow == 0 )
 
  151        else if ( childColumn == 0 && childRow == 1 )
 
  153        else if ( childColumn == 1 && childRow == 1 )
 
  156        const QVariant childNode = node.at( childIndex );
 
  157        if ( childNode.userType() == QMetaType::Type::QVariantList )
 
  159          node = childNode.toList();
 
  160          column = tile.
column() * 2;
 
  161          row = tile.
row() * 2;
 
  167          const long long nodeInt = childNode.toLongLong( &ok );
 
  171            QgsDebugError( QStringLiteral( 
"Found tile index node with unsupported value: %1" ).arg( childNode.toString() ) );
 
  173          else if ( nodeInt == 0 )
 
  178          else if ( nodeInt == 1 )
 
  184          else if ( nodeInt == 2 )
 
  200    const QMap< int, QgsTileMatrix > tileMatrices = 
mTileMatrices;
 
  204      const auto it = tileMatrices.constFind( 
id.zoomLevel() );
 
  205      if ( it == tileMatrices.constEnd() )
 
  209      if ( 
id.column() >= it->matrixWidth() || 
id.row() >= it->matrixHeight() )
 
 
@ Critical
Critical/error message.
 
@ Esri
No scale doubling, always rounds down when matching to available tile levels.
 
TileAvailability
Possible availability states for a tile within a tile matrix.
 
@ UseLowerZoomLevelTile
Tile is not available at the requested zoom level, it should be replaced by a tile from a lower zoom ...
 
@ NotAvailable
Tile is not available within the matrix, e.g. there is no content for the tile.
 
@ AvailableNoChildren
Tile is available within the matrix, and is known to have no children (ie no higher zoom level tiles ...
 
@ Available
Tile is available within the matrix.
 
static QgsCoordinateReferenceSystem convertSpatialReference(const QVariantMap &spatialReferenceMap)
Converts a spatial reference JSON definition to a QgsCoordinateReferenceSystem value.
 
This class represents a coordinate reference system (CRS).
 
static void logMessage(const QString &message, const QString &tag=QString(), Qgis::MessageLevel level=Qgis::MessageLevel::Warning, bool notifyUser=true)
Adds a message to the log instance (and creates it if necessary).
 
A class to represent a 2D point.
 
void addGoogleCrs84QuadTiles(int minimumZoom=0, int maximumZoom=14)
Adds tile matrices corresponding to the standard web mercator/GoogleCRS84Quad setup.
 
QgsCoordinateReferenceSystem crs() const
Returns the coordinate reference system associated with the tiles.
 
std::function< Qgis::TileAvailability(QgsTileXYZ id) > mTileAvailabilityFunction
 
int minimumZoom() const
Returns the minimum zoom level for tiles present in the set.
 
QMap< int, QgsTileMatrix > mTileMatrices
 
int maximumZoom() const
Returns the maximum zoom level for tiles present in the set.
 
void addMatrix(const QgsTileMatrix &matrix)
Adds a matrix to the set.
 
void setRootMatrix(const QgsTileMatrix &matrix)
Sets the root tile matrix (usually corresponding to zoom level 0).
 
void setScaleToTileZoomMethod(Qgis::ScaleToTileZoomLevelMethod method)
Sets the scale to tile zoom method.
 
std::function< Qgis::TileAvailability(QgsTileXYZ id, QgsTileXYZ &replacement) > mTileReplacementFunction
 
Defines a matrix of tiles for a single zoom level: it is defined by its size (width *.
 
void setScale(double scale)
Sets the scale denominator of the tile matrix.
 
static QgsTileMatrix fromCustomDef(int zoomLevel, const QgsCoordinateReferenceSystem &crs, const QgsPointXY &z0TopLeftPoint, double z0Dimension, int z0MatrixWidth=1, int z0MatrixHeight=1)
Returns a tile matrix for a specific CRS, top left point, zoom level 0 dimension in CRS units.
 
Stores coordinates of a tile in a tile matrix set.
 
int zoomLevel() const
Returns tile's zoom level (Z)
 
int column() const
Returns tile's column index (X)
 
int row() const
Returns tile's row index (Y)
 
Encapsulates properties of a vector tile matrix set, including tile origins and scaling information.
 
bool fromEsriJson(const QVariantMap &json, const QVariantMap &rootTileMap=QVariantMap())
Initializes the tile structure settings from an ESRI REST VectorTileService json map.
 
static QgsVectorTileMatrixSet fromWebMercator(int minimumZoom=0, int maximumZoom=14)
Returns a vector tile structure corresponding to the standard web mercator/GoogleCRS84Quad setup.
 
#define QgsDebugError(str)