File tree Expand file tree Collapse file tree 3 files changed +38
-18
lines changed Expand file tree Collapse file tree 3 files changed +38
-18
lines changed Original file line number Diff line number Diff line change 1616 ***************************************************************************/
1717
1818#include " qgswmsparameters.h"
19+ #include " qgsdatasourceuri.h"
1920#include " qgsmessagelog.h"
2021#include < iostream>
2122
@@ -512,6 +513,16 @@ namespace QgsWms
512513 raiseError ( name );
513514 }
514515 }
516+ else // maybe an external wms parameter?
517+ {
518+ int separator = key.indexOf ( " :" );
519+ if ( separator >= 1 )
520+ {
521+ QString id = key.left ( separator );
522+ QString param = key.right ( key.length () - separator - 1 );
523+ mExternalWMSParameters [id].insert ( param, parameters[key] );
524+ }
525+ }
515526 }
516527 }
517528 }
@@ -1874,6 +1885,23 @@ namespace QgsWms
18741885 return param;
18751886 }
18761887
1888+ QString QgsWmsParameters::externalWMSUri ( const QString &id ) const
1889+ {
1890+ if ( !mExternalWMSParameters .contains ( id ) )
1891+ {
1892+ return QString ();
1893+ }
1894+
1895+ QgsDataSourceUri wmsUri;
1896+ const QMap<QString, QString> ¶mMap = mExternalWMSParameters [ id ];
1897+ QMap<QString, QString>::const_iterator paramIt = paramMap.constBegin ();
1898+ for ( ; paramIt != paramMap.constEnd (); ++paramIt )
1899+ {
1900+ wmsUri.setParam ( paramIt.key ().toLower (), paramIt.value () );
1901+ }
1902+ return wmsUri.encodedUri ();
1903+ }
1904+
18771905 QString QgsWmsParameters::name ( ParameterName name ) const
18781906 {
18791907 const QMetaEnum metaEnum ( QMetaEnum::fromType<ParameterName>() );
Original file line number Diff line number Diff line change @@ -909,6 +909,13 @@ namespace QgsWms
909909 */
910910 QgsWmsParametersComposerMap composerMapParameters ( int mapId ) const ;
911911
912+ /* *
913+ * @brief externalWMSUri
914+ * @param id the id of the external wms
915+ * @return uri string or an empty string if the external wms id does not exist
916+ */
917+ QString externalWMSUri ( const QString &id ) const ;
918+
912919 private:
913920 QString name ( ParameterName name ) const ;
914921 void raiseError ( ParameterName name ) const ;
@@ -955,6 +962,7 @@ namespace QgsWms
955962 QgsServerRequest::Parameters mRequestParameters ;
956963 QMap<ParameterName, Parameter> mParameters ;
957964 QMap<int , QMap<ParameterName, Parameter>> mComposerParameters ;
965+ QMap<QString, QMap<QString, QString> > mExternalWMSParameters ;
958966 QList<QgsProjectVersion> mVersions ;
959967 };
960968}
Original file line number Diff line number Diff line change @@ -2653,24 +2653,8 @@ namespace QgsWms
26532653
26542654 QgsMapLayer *QgsRenderer::createExternalWMSLayer ( const QString &externalLayerId ) const
26552655 {
2656- QgsMapLayer *wmsLayer = 0 ;
2657- QgsDataSourceUri wmsUri;
2658-
2659- QgsServerRequest::Parameters::const_iterator it = mParameters .lowerBound ( externalLayerId.toUpper () + " :" );
2660- while ( it != mParameters .constEnd () )
2661- {
2662- if ( !it.key ().startsWith ( externalLayerId.toUpper () + " :" ) )
2663- {
2664- break ;
2665- }
2666-
2667- QString paramKey = it.key ();
2668- paramKey.remove ( 0 , externalLayerId.size () + 1 );
2669- wmsUri.setParam ( paramKey.toLower (), it.value () );
2670- ++it;
2671- }
2672-
2673- wmsLayer = new QgsRasterLayer ( wmsUri.encodedUri (), externalLayerId, QStringLiteral ( " wms" ) );
2656+ QString wmsUri = mWmsParameters .externalWMSUri ( externalLayerId.toUpper () );
2657+ QgsMapLayer *wmsLayer = new QgsRasterLayer ( wmsUri, externalLayerId, QStringLiteral ( " wms" ) );
26742658 if ( !wmsLayer->isValid () )
26752659 {
26762660 delete wmsLayer;
You can’t perform that action at this time.
0 commit comments