diff --git a/src/providers/wms/qgswmscapabilities.cpp b/src/providers/wms/qgswmscapabilities.cpp index 29824dd50cda..6e77c572f7ec 100644 --- a/src/providers/wms/qgswmscapabilities.cpp +++ b/src/providers/wms/qgswmscapabilities.cpp @@ -2344,8 +2344,7 @@ bool QgsWmsCapabilitiesDownload::downloadCapabilities() mIsAborted = false; QString url = mBaseUrl; - if ( !url.contains( QLatin1String( "SERVICE=WMTS" ), Qt::CaseInsensitive ) && - !url.contains( QLatin1String( "/WMTSCapabilities.xml" ), Qt::CaseInsensitive ) ) + if ( !QgsWmsProvider::isUrlForWMTS( url ) ) { url += QLatin1String( "SERVICE=WMS&REQUEST=GetCapabilities" ); } diff --git a/src/providers/wms/qgswmsprovider.cpp b/src/providers/wms/qgswmsprovider.cpp index 02bc7d9e765d..0a694faac389 100644 --- a/src/providers/wms/qgswmsprovider.cpp +++ b/src/providers/wms/qgswmsprovider.cpp @@ -197,7 +197,7 @@ QString QgsWmsProvider::prepareUri( QString uri ) // some services provide a percent/url encoded (legend) uri string, always decode here uri = QUrl::fromPercentEncoding( uri.toUtf8() ); - if ( uri.contains( QLatin1String( "SERVICE=WMTS" ) ) || uri.contains( QLatin1String( "/WMTSCapabilities.xml" ) ) ) + if ( isUrlForWMTS( uri ) ) { return uri; } @@ -3652,7 +3652,7 @@ QUrl QgsWmsProvider::getLegendGraphicFullURL( double scale, const QgsRectangle & QUrl url( lurl ); QUrlQuery query( url ); - if ( dataSourceUri().contains( "SERVICE=WMTS" ) || dataSourceUri().contains( "/WMTSCapabilities.xml" ) ) + if ( isUrlForWMTS( dataSourceUri() ) ) { QgsDebugMsg( QString( "getlegendgraphicrequest: %1" ).arg( url.toString() ) ); return url; @@ -3865,6 +3865,14 @@ void QgsWmsProvider::getLegendGraphicReplyProgress( qint64 bytesReceived, qint64 emit statusChanged( msg ); } +bool QgsWmsProvider::isUrlForWMTS( const QString &url ) +{ + // Do comparison in case insensitive way to match OGC KVP requirements + return url.contains( QLatin1String( "SERVICE=WMTS" ), Qt::CaseInsensitive ) || + url.contains( QLatin1String( "/WMTSCapabilities.xml" ), Qt::CaseInsensitive ); +} + + QgsWmsProvider *QgsWmsProviderMetadata::createProvider( const QString &uri, const QgsDataProvider::ProviderOptions &options ) { return new QgsWmsProvider( uri, options ); diff --git a/src/providers/wms/qgswmsprovider.h b/src/providers/wms/qgswmsprovider.h index db1865dce721..c6f8cfc5cb52 100644 --- a/src/providers/wms/qgswmsprovider.h +++ b/src/providers/wms/qgswmsprovider.h @@ -261,6 +261,8 @@ class QgsWmsProvider final: public QgsRasterDataProvider } TilePosition; typedef QList TilePositions; + static bool isUrlForWMTS( const QString &url ); + private slots: void identifyReplyFinished(); void getLegendGraphicReplyFinished( const QImage & );