Skip to content

Commit ca34d14

Browse files
committedMar 20, 2023
Start moving readTile to data providers
1 parent f3cab74 commit ca34d14

File tree

2 files changed

+89
-10
lines changed

2 files changed

+89
-10
lines changed
 

‎src/core/vectortile/qgsvectortilelayer.cpp

Lines changed: 82 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -904,21 +904,13 @@ QString QgsVectorTileLayer::sourcePath() const
904904
QByteArray QgsVectorTileLayer::getRawTile( QgsTileXYZ tileID )
905905
{
906906
QGIS_PROTECT_QOBJECT_THREAD_ACCESS
907+
907908
QgsVectorTileDataProvider *vtProvider = qobject_cast< QgsVectorTileDataProvider * >( mDataProvider.get() );
908909
if ( !vtProvider )
909910
return QByteArray();
910911

911912
const QgsTileMatrix tileMatrix = mMatrixSet.tileMatrix( tileID.zoomLevel() );
912-
const QgsTileRange tileRange( tileID.column(), tileID.column(), tileID.row(), tileID.row() );
913-
914-
QgsDataSourceUri dsUri;
915-
dsUri.setEncodedUri( mDataSource );
916-
const QString authcfg = dsUri.authConfigId();
917-
918-
QList<QgsVectorTileRawData> rawTiles = QgsVectorTileLoader::blockingFetchTileRawData( mSourceType, vtProvider->sourcePath(), tileMatrix, QPointF(), tileRange, authcfg, dsUri.httpHeaders() );
919-
if ( rawTiles.isEmpty() )
920-
return QByteArray();
921-
return rawTiles.first().data;
913+
return vtProvider->readTile( tileMatrix, tileID );
922914
}
923915

924916
void QgsVectorTileLayer::setRenderer( QgsVectorTileRenderer *r )
@@ -1404,6 +1396,26 @@ QgsCoordinateReferenceSystem QgsXyzVectorTileDataProvider::crs() const
14041396
return QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:3857" ) );
14051397
}
14061398

1399+
QByteArray QgsXyzVectorTileDataProvider::readTile( const QgsTileMatrix &tileMatrix, const QgsTileXYZ &id ) const
1400+
{
1401+
QgsDataSourceUri dsUri;
1402+
dsUri.setEncodedUri( dataSourceUri() );
1403+
const QString authcfg = dsUri.authConfigId();
1404+
1405+
const QgsTileRange tileRange( id.column(), id.column(), id.row(), id.row() );
1406+
1407+
QList<QgsVectorTileRawData> rawTiles = QgsVectorTileLoader::blockingFetchTileRawData( QStringLiteral( "xyz" ),
1408+
dsUri.param( QStringLiteral( "url" ) ),
1409+
tileMatrix,
1410+
QPointF(),
1411+
tileRange,
1412+
authcfg,
1413+
dsUri.httpHeaders() );
1414+
if ( rawTiles.isEmpty() )
1415+
return QByteArray();
1416+
return rawTiles.first().data;
1417+
}
1418+
14071419
//
14081420
// QgsMbTilesVectorTileDataProvider
14091421
//
@@ -1446,6 +1458,26 @@ QgsCoordinateReferenceSystem QgsMbTilesVectorTileDataProvider::crs() const
14461458
return QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:3857" ) );
14471459
}
14481460

1461+
QByteArray QgsMbTilesVectorTileDataProvider::readTile( const QgsTileMatrix &tileMatrix, const QgsTileXYZ &id ) const
1462+
{
1463+
QgsDataSourceUri dsUri;
1464+
dsUri.setEncodedUri( dataSourceUri() );
1465+
const QString authcfg = dsUri.authConfigId();
1466+
1467+
const QgsTileRange tileRange( id.column(), id.column(), id.row(), id.row() );
1468+
1469+
QList<QgsVectorTileRawData> rawTiles = QgsVectorTileLoader::blockingFetchTileRawData( QStringLiteral( "mbtiles" ),
1470+
dsUri.param( QStringLiteral( "url" ) ),
1471+
tileMatrix,
1472+
QPointF(),
1473+
tileRange,
1474+
authcfg,
1475+
dsUri.httpHeaders() );
1476+
if ( rawTiles.isEmpty() )
1477+
return QByteArray();
1478+
return rawTiles.first().data;
1479+
}
1480+
14491481
//
14501482
// QgsVtpkVectorTileDataProvider
14511483
//
@@ -1488,6 +1520,26 @@ QgsCoordinateReferenceSystem QgsVtpkVectorTileDataProvider::crs() const
14881520
return QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:3857" ) );
14891521
}
14901522

1523+
QByteArray QgsVtpkVectorTileDataProvider::readTile( const QgsTileMatrix &tileMatrix, const QgsTileXYZ &id ) const
1524+
{
1525+
QgsDataSourceUri dsUri;
1526+
dsUri.setEncodedUri( dataSourceUri() );
1527+
const QString authcfg = dsUri.authConfigId();
1528+
1529+
const QgsTileRange tileRange( id.column(), id.column(), id.row(), id.row() );
1530+
1531+
QList<QgsVectorTileRawData> rawTiles = QgsVectorTileLoader::blockingFetchTileRawData( QStringLiteral( "vtpk" ),
1532+
dsUri.param( QStringLiteral( "url" ) ),
1533+
tileMatrix,
1534+
QPointF(),
1535+
tileRange,
1536+
authcfg,
1537+
dsUri.httpHeaders() );
1538+
if ( rawTiles.isEmpty() )
1539+
return QByteArray();
1540+
return rawTiles.first().data;
1541+
}
1542+
14911543
//
14921544
// QgsArcGisVectorTileServiceDataProvider
14931545
//
@@ -1529,6 +1581,26 @@ QgsCoordinateReferenceSystem QgsArcGisVectorTileServiceDataProvider::crs() const
15291581
return QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:3857" ) );
15301582
}
15311583

1584+
QByteArray QgsArcGisVectorTileServiceDataProvider::readTile( const QgsTileMatrix &tileMatrix, const QgsTileXYZ &id ) const
1585+
{
1586+
QgsDataSourceUri dsUri;
1587+
dsUri.setEncodedUri( dataSourceUri() );
1588+
const QString authcfg = dsUri.authConfigId();
1589+
1590+
const QgsTileRange tileRange( id.column(), id.column(), id.row(), id.row() );
1591+
1592+
QList<QgsVectorTileRawData> rawTiles = QgsVectorTileLoader::blockingFetchTileRawData( QStringLiteral( "xyz" ),
1593+
mSourcePath,
1594+
tileMatrix,
1595+
QPointF(),
1596+
tileRange,
1597+
authcfg,
1598+
dsUri.httpHeaders() );
1599+
if ( rawTiles.isEmpty() )
1600+
return QByteArray();
1601+
return rawTiles.first().data;
1602+
}
1603+
15321604
///@endcond
15331605

15341606

‎src/core/vectortile/qgsvectortilelayer.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,9 @@ class QgsVectorTileDataProvider : public QgsDataProvider
343343
virtual QString sourcePath() const = 0;
344344
virtual QgsVectorTileDataProvider *clone() const = 0 SIP_FACTORY;
345345

346+
//! Returns raw tile data for a single tile
347+
virtual QByteArray readTile( const QgsTileMatrix &tileMatrix, const QgsTileXYZ &id ) const = 0;
348+
346349
};
347350

348351
class QgsXyzVectorTileDataProvider : public QgsVectorTileDataProvider
@@ -358,6 +361,7 @@ class QgsXyzVectorTileDataProvider : public QgsVectorTileDataProvider
358361
QString sourcePath() const override;
359362
bool isValid() const override;
360363
QgsCoordinateReferenceSystem crs() const override;
364+
QByteArray readTile( const QgsTileMatrix &tileMatrix, const QgsTileXYZ &id ) const override;
361365
};
362366

363367
class QgsMbTilesVectorTileDataProvider : public QgsVectorTileDataProvider
@@ -373,6 +377,7 @@ class QgsMbTilesVectorTileDataProvider : public QgsVectorTileDataProvider
373377
QString sourcePath() const override;
374378
bool isValid() const override;
375379
QgsCoordinateReferenceSystem crs() const override;
380+
QByteArray readTile( const QgsTileMatrix &tileMatrix, const QgsTileXYZ &id ) const override;
376381
};
377382

378383
class QgsVtpkVectorTileDataProvider : public QgsVectorTileDataProvider
@@ -388,6 +393,7 @@ class QgsVtpkVectorTileDataProvider : public QgsVectorTileDataProvider
388393
QString sourcePath() const override;
389394
bool isValid() const override;
390395
QgsCoordinateReferenceSystem crs() const override;
396+
QByteArray readTile( const QgsTileMatrix &tileMatrix, const QgsTileXYZ &id ) const override;
391397
};
392398

393399
class QgsArcGisVectorTileServiceDataProvider : public QgsVectorTileDataProvider
@@ -403,6 +409,7 @@ class QgsArcGisVectorTileServiceDataProvider : public QgsVectorTileDataProvider
403409
QString sourcePath() const override;
404410
bool isValid() const override;
405411
QgsCoordinateReferenceSystem crs() const override;
412+
QByteArray readTile( const QgsTileMatrix &tileMatrix, const QgsTileXYZ &id ) const override;
406413

407414
private:
408415

0 commit comments

Comments
 (0)
Please sign in to comment.