QGIS API Documentation 3.28.0-Firenze (ed3ad0430f)
qgsvectortilematrixset.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsvectortilematrixset.cpp
3 --------------------------------------
4 Date : March 2022
5 Copyright : (C) 2022 by Nyall Dawson
6 Email : nyall dot dawson 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
17#include "qgstiles.h"
18#include "qgsarcgisrestutils.h"
19#include "qgslogger.h"
20
22{
25 return res;
26}
27
28bool QgsVectorTileMatrixSet::fromEsriJson( const QVariantMap &json )
29{
31
32 const QVariantMap tileInfo = json.value( QStringLiteral( "tileInfo" ) ).toMap();
33
34 const QVariantMap origin = tileInfo.value( QStringLiteral( "origin" ) ).toMap();
35 const double originX = origin.value( QStringLiteral( "x" ) ).toDouble();
36 const double originY = origin.value( QStringLiteral( "y" ) ).toDouble();
37
38 const int rows = tileInfo.value( QStringLiteral( "rows" ), QStringLiteral( "512" ) ).toInt();
39 const int cols = tileInfo.value( QStringLiteral( "cols" ), QStringLiteral( "512" ) ).toInt();
40 if ( rows != cols )
41 {
42 QgsDebugMsg( QStringLiteral( "row/col size mismatch: %1 vs %2 - tile misalignment may occur" ).arg( rows ).arg( cols ) );
43 }
44
45 const QgsCoordinateReferenceSystem crs = QgsArcGisRestUtils::convertSpatialReference( tileInfo.value( QStringLiteral( "spatialReference" ) ).toMap() );
46
47 const QVariantList lodList = tileInfo.value( QStringLiteral( "lods" ) ).toList();
48 bool foundLevel0 = false;
49 double z0Dimension = 0;
50
51 for ( const QVariant &lod : lodList )
52 {
53 const QVariantMap lodMap = lod.toMap();
54 const int level = lodMap.value( QStringLiteral( "level" ) ).toInt();
55 if ( level == 0 )
56 {
57 z0Dimension = lodMap.value( QStringLiteral( "resolution" ) ).toDouble() * rows;
58 foundLevel0 = true;
59 break;
60 }
61 }
62
63 if ( !foundLevel0 )
64 return false;
65
66 for ( const QVariant &lod : lodList )
67 {
68 const QVariantMap lodMap = lod.toMap();
69 const int level = lodMap.value( QStringLiteral( "level" ) ).toInt();
70
71 // TODO -- we shouldn't be using z0Dimension here, but rather the actual dimension and properties of
72 // this exact LOD
74 level,
75 crs,
76 QgsPointXY( originX, originY ),
77 z0Dimension );
78 tm.setScale( lodMap.value( QStringLiteral( "scale" ) ).toDouble() );
79 addMatrix( tm );
80 }
81
82 setRootMatrix( QgsTileMatrix::fromCustomDef( 0, crs, QgsPointXY( originX, originY ), z0Dimension, 1, 1 ) );
83 return true;
84}
@ Esri
No scale doubling, always rounds down when matching to available tile levels.
static QgsCoordinateReferenceSystem convertSpatialReference(const QVariantMap &spatialReferenceMap)
Converts a spatial reference JSON definition to a QgsCoordinateReferenceSystem value.
This class represents a coordinate reference system (CRS).
A class to represent a 2D point.
Definition: qgspointxy.h:59
void addGoogleCrs84QuadTiles(int minimumZoom=0, int maximumZoom=14)
Adds tile matrices corresponding to the standard web mercator/GoogleCRS84Quad setup.
Definition: qgstiles.cpp:136
QgsCoordinateReferenceSystem crs() const
Returns the coordinate reference system associated with the tiles.
Definition: qgstiles.cpp:206
int minimumZoom() const
Returns the minimum zoom level for tiles present in the set.
Definition: qgstiles.cpp:169
int maximumZoom() const
Returns the maximum zoom level for tiles present in the set.
Definition: qgstiles.cpp:180
void addMatrix(const QgsTileMatrix &matrix)
Adds a matrix to the set.
Definition: qgstiles.cpp:164
void setRootMatrix(const QgsTileMatrix &matrix)
Sets the root tile matrix (usually corresponding to zoom level 0).
Definition: qgstiles.cpp:159
void setScaleToTileZoomMethod(Qgis::ScaleToTileZoomLevelMethod method)
Sets the scale to tile zoom method.
Definition: qgstiles.h:351
Defines a matrix of tiles for a single zoom level: it is defined by its size (width *.
Definition: qgstiles.h:108
void setScale(double scale)
Sets the scale denominator of the tile matrix.
Definition: qgstiles.h:178
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.
Definition: qgstiles.cpp:30
Encapsulates properties of a vector tile matrix set, including tile origins and scaling information.
bool fromEsriJson(const QVariantMap &json)
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 QgsDebugMsg(str)
Definition: qgslogger.h:38