From d360fccf05b36cc635f1e8e745a83218cac01a4a Mon Sep 17 00:00:00 2001 From: Marco Hugentobler Date: Tue, 17 Nov 2020 11:41:17 +0100 Subject: [PATCH] Allow the usage of opacity parameter in a WMS provider URL --- src/providers/wms/qgswmscapabilities.cpp | 21 ++++++++++++++++++++ src/providers/wms/qgswmscapabilities.h | 2 ++ src/providers/wms/qgswmsprovider.cpp | 5 +++++ src/server/services/wms/qgswmsparameters.cpp | 2 +- 4 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/providers/wms/qgswmscapabilities.cpp b/src/providers/wms/qgswmscapabilities.cpp index fd2f2566532c..4d1f4b6a9516 100644 --- a/src/providers/wms/qgswmscapabilities.cpp +++ b/src/providers/wms/qgswmscapabilities.cpp @@ -138,6 +138,27 @@ bool QgsWmsSettings::parseUri( const QString &uriString ) mActiveSubStyles = uri.params( QStringLiteral( "styles" ) ); QgsDebugMsgLevel( "Entering: layers:" + mActiveSubLayers.join( ", " ) + ", styles:" + mActiveSubStyles.join( ", " ), 2 ); + //opacities + if ( uri.hasParam( QStringLiteral( "opacities" ) ) ) + { + mOpacities.clear(); + QStringList opacities = uri.params( QStringLiteral( "opacities" ) ); + QStringList::const_iterator oIt = opacities.constBegin(); + for ( ; oIt != opacities.constEnd(); ++oIt ) + { + bool ok = false; + oIt->toInt( &ok ); + if ( ok ) + { + mOpacities.append( *oIt ); + } + else + { + mOpacities.append( QStringLiteral( "255" ) ); + } + } + } + mImageMimeType = uri.param( QStringLiteral( "format" ) ); QgsDebugMsgLevel( "Setting image encoding to " + mImageMimeType + '.', 2 ); diff --git a/src/providers/wms/qgswmscapabilities.h b/src/providers/wms/qgswmscapabilities.h index 59a6538f691b..7645c935b316 100644 --- a/src/providers/wms/qgswmscapabilities.h +++ b/src/providers/wms/qgswmscapabilities.h @@ -933,6 +933,8 @@ class QgsWmsSettings QStringList mActiveSubLayers; QStringList mActiveSubStyles; + QStringList mOpacities; + /** * Visibility status of the given active sublayer */ diff --git a/src/providers/wms/qgswmsprovider.cpp b/src/providers/wms/qgswmsprovider.cpp index 560d6de6c76b..37fde9c4c007 100644 --- a/src/providers/wms/qgswmsprovider.cpp +++ b/src/providers/wms/qgswmsprovider.cpp @@ -1069,6 +1069,11 @@ QUrl QgsWmsProvider::createRequestUrlWMS( const QgsRectangle &viewExtent, int pi setQueryItem( query, QStringLiteral( "HEIGHT" ), QString::number( pixelHeight ) ); setQueryItem( query, QStringLiteral( "LAYERS" ), layers ); setQueryItem( query, QStringLiteral( "STYLES" ), styles ); + QStringList opacityList = mSettings.mOpacities; + if ( !opacityList.isEmpty() ) + { + setQueryItem( query, QStringLiteral( "OPACITIES" ), mSettings.mOpacities.join( ',' ) ); + } // For WMS-T layers if ( temporalCapabilities() && diff --git a/src/server/services/wms/qgswmsparameters.cpp b/src/server/services/wms/qgswmsparameters.cpp index f6af07e29ebb..ec3e711b5b38 100644 --- a/src/server/services/wms/qgswmsparameters.cpp +++ b/src/server/services/wms/qgswmsparameters.cpp @@ -1891,7 +1891,7 @@ namespace QgsWms for ( ; paramIt != paramMap.constEnd(); ++paramIt ) { QString paramName = paramIt.key().toLower(); - if ( paramName == QLatin1String( "layers" ) || paramName == QLatin1String( "styles" ) ) + if ( paramName == QLatin1String( "layers" ) || paramName == QLatin1String( "styles" ) || paramName == QLatin1String( "opacities" ) ) { const QStringList values = paramIt.value().split( ',' ); for ( const QString &value : values )