Skip to content

Commit c993888

Browse files
committedOct 20, 2017
Move creation of datasource uri for external wms layers to QgsWMSParameters
1 parent 288d2ee commit c993888

File tree

3 files changed

+38
-18
lines changed

3 files changed

+38
-18
lines changed
 

‎src/server/services/wms/qgswmsparameters.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
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> &paramMap = 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>() );

‎src/server/services/wms/qgswmsparameters.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff 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
}

‎src/server/services/wms/qgswmsrenderer.cpp

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff 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;

0 commit comments

Comments
 (0)
Please sign in to comment.