Skip to content

Commit

Permalink
Start moving readTile to data providers
Browse files Browse the repository at this point in the history
  • Loading branch information
nyalldawson committed Mar 20, 2023
1 parent f3cab74 commit ca34d14
Show file tree
Hide file tree
Showing 2 changed files with 89 additions and 10 deletions.
92 changes: 82 additions & 10 deletions src/core/vectortile/qgsvectortilelayer.cpp
Expand Up @@ -904,21 +904,13 @@ QString QgsVectorTileLayer::sourcePath() const
QByteArray QgsVectorTileLayer::getRawTile( QgsTileXYZ tileID )
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

QgsVectorTileDataProvider *vtProvider = qobject_cast< QgsVectorTileDataProvider * >( mDataProvider.get() );
if ( !vtProvider )
return QByteArray();

const QgsTileMatrix tileMatrix = mMatrixSet.tileMatrix( tileID.zoomLevel() );
const QgsTileRange tileRange( tileID.column(), tileID.column(), tileID.row(), tileID.row() );

QgsDataSourceUri dsUri;
dsUri.setEncodedUri( mDataSource );
const QString authcfg = dsUri.authConfigId();

QList<QgsVectorTileRawData> rawTiles = QgsVectorTileLoader::blockingFetchTileRawData( mSourceType, vtProvider->sourcePath(), tileMatrix, QPointF(), tileRange, authcfg, dsUri.httpHeaders() );
if ( rawTiles.isEmpty() )
return QByteArray();
return rawTiles.first().data;
return vtProvider->readTile( tileMatrix, tileID );
}

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

QByteArray QgsXyzVectorTileDataProvider::readTile( const QgsTileMatrix &tileMatrix, const QgsTileXYZ &id ) const
{
QgsDataSourceUri dsUri;
dsUri.setEncodedUri( dataSourceUri() );
const QString authcfg = dsUri.authConfigId();

const QgsTileRange tileRange( id.column(), id.column(), id.row(), id.row() );

QList<QgsVectorTileRawData> rawTiles = QgsVectorTileLoader::blockingFetchTileRawData( QStringLiteral( "xyz" ),
dsUri.param( QStringLiteral( "url" ) ),
tileMatrix,
QPointF(),
tileRange,
authcfg,
dsUri.httpHeaders() );
if ( rawTiles.isEmpty() )
return QByteArray();
return rawTiles.first().data;
}

//
// QgsMbTilesVectorTileDataProvider
//
Expand Down Expand Up @@ -1446,6 +1458,26 @@ QgsCoordinateReferenceSystem QgsMbTilesVectorTileDataProvider::crs() const
return QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:3857" ) );
}

QByteArray QgsMbTilesVectorTileDataProvider::readTile( const QgsTileMatrix &tileMatrix, const QgsTileXYZ &id ) const
{
QgsDataSourceUri dsUri;
dsUri.setEncodedUri( dataSourceUri() );
const QString authcfg = dsUri.authConfigId();

const QgsTileRange tileRange( id.column(), id.column(), id.row(), id.row() );

QList<QgsVectorTileRawData> rawTiles = QgsVectorTileLoader::blockingFetchTileRawData( QStringLiteral( "mbtiles" ),
dsUri.param( QStringLiteral( "url" ) ),
tileMatrix,
QPointF(),
tileRange,
authcfg,
dsUri.httpHeaders() );
if ( rawTiles.isEmpty() )
return QByteArray();
return rawTiles.first().data;
}

//
// QgsVtpkVectorTileDataProvider
//
Expand Down Expand Up @@ -1488,6 +1520,26 @@ QgsCoordinateReferenceSystem QgsVtpkVectorTileDataProvider::crs() const
return QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:3857" ) );
}

QByteArray QgsVtpkVectorTileDataProvider::readTile( const QgsTileMatrix &tileMatrix, const QgsTileXYZ &id ) const
{
QgsDataSourceUri dsUri;
dsUri.setEncodedUri( dataSourceUri() );
const QString authcfg = dsUri.authConfigId();

const QgsTileRange tileRange( id.column(), id.column(), id.row(), id.row() );

QList<QgsVectorTileRawData> rawTiles = QgsVectorTileLoader::blockingFetchTileRawData( QStringLiteral( "vtpk" ),
dsUri.param( QStringLiteral( "url" ) ),
tileMatrix,
QPointF(),
tileRange,
authcfg,
dsUri.httpHeaders() );
if ( rawTiles.isEmpty() )
return QByteArray();
return rawTiles.first().data;
}

//
// QgsArcGisVectorTileServiceDataProvider
//
Expand Down Expand Up @@ -1529,6 +1581,26 @@ QgsCoordinateReferenceSystem QgsArcGisVectorTileServiceDataProvider::crs() const
return QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:3857" ) );
}

QByteArray QgsArcGisVectorTileServiceDataProvider::readTile( const QgsTileMatrix &tileMatrix, const QgsTileXYZ &id ) const
{
QgsDataSourceUri dsUri;
dsUri.setEncodedUri( dataSourceUri() );
const QString authcfg = dsUri.authConfigId();

const QgsTileRange tileRange( id.column(), id.column(), id.row(), id.row() );

QList<QgsVectorTileRawData> rawTiles = QgsVectorTileLoader::blockingFetchTileRawData( QStringLiteral( "xyz" ),
mSourcePath,
tileMatrix,
QPointF(),
tileRange,
authcfg,
dsUri.httpHeaders() );
if ( rawTiles.isEmpty() )
return QByteArray();
return rawTiles.first().data;
}

///@endcond


7 changes: 7 additions & 0 deletions src/core/vectortile/qgsvectortilelayer.h
Expand Up @@ -343,6 +343,9 @@ class QgsVectorTileDataProvider : public QgsDataProvider
virtual QString sourcePath() const = 0;
virtual QgsVectorTileDataProvider *clone() const = 0 SIP_FACTORY;

//! Returns raw tile data for a single tile
virtual QByteArray readTile( const QgsTileMatrix &tileMatrix, const QgsTileXYZ &id ) const = 0;

};

class QgsXyzVectorTileDataProvider : public QgsVectorTileDataProvider
Expand All @@ -358,6 +361,7 @@ class QgsXyzVectorTileDataProvider : public QgsVectorTileDataProvider
QString sourcePath() const override;
bool isValid() const override;
QgsCoordinateReferenceSystem crs() const override;
QByteArray readTile( const QgsTileMatrix &tileMatrix, const QgsTileXYZ &id ) const override;
};

class QgsMbTilesVectorTileDataProvider : public QgsVectorTileDataProvider
Expand All @@ -373,6 +377,7 @@ class QgsMbTilesVectorTileDataProvider : public QgsVectorTileDataProvider
QString sourcePath() const override;
bool isValid() const override;
QgsCoordinateReferenceSystem crs() const override;
QByteArray readTile( const QgsTileMatrix &tileMatrix, const QgsTileXYZ &id ) const override;
};

class QgsVtpkVectorTileDataProvider : public QgsVectorTileDataProvider
Expand All @@ -388,6 +393,7 @@ class QgsVtpkVectorTileDataProvider : public QgsVectorTileDataProvider
QString sourcePath() const override;
bool isValid() const override;
QgsCoordinateReferenceSystem crs() const override;
QByteArray readTile( const QgsTileMatrix &tileMatrix, const QgsTileXYZ &id ) const override;
};

class QgsArcGisVectorTileServiceDataProvider : public QgsVectorTileDataProvider
Expand All @@ -403,6 +409,7 @@ class QgsArcGisVectorTileServiceDataProvider : public QgsVectorTileDataProvider
QString sourcePath() const override;
bool isValid() const override;
QgsCoordinateReferenceSystem crs() const override;
QByteArray readTile( const QgsTileMatrix &tileMatrix, const QgsTileXYZ &id ) const override;

private:

Expand Down

0 comments on commit ca34d14

Please sign in to comment.