Skip to content

Commit 40201b2

Browse files
committed
Support external WMS layers in GetPrint and GetMap requests
1 parent f579f1a commit 40201b2

File tree

2 files changed

+43
-1
lines changed

2 files changed

+43
-1
lines changed

src/server/services/wms/qgswmsrenderer.cpp

+40-1
Original file line numberDiff line numberDiff line change
@@ -2610,7 +2610,17 @@ namespace QgsWms
26102610
{
26112611
QString nickname = param.mNickname;
26122612
QString style = param.mStyle;
2613-
if ( mNicknameLayers.contains( nickname ) && !mRestrictedLayers.contains( nickname ) )
2613+
if ( nickname.startsWith( "EXTERNAL_WMS:" ) )
2614+
{
2615+
QString externalLayerId = nickname;
2616+
externalLayerId.remove( 0, 13 );
2617+
QgsMapLayer *externalWMSLayer = createExternalWMSLayer( externalLayerId );
2618+
if ( externalWMSLayer )
2619+
{
2620+
layers.append( externalWMSLayer );
2621+
}
2622+
}
2623+
else if ( mNicknameLayers.contains( nickname ) && !mRestrictedLayers.contains( nickname ) )
26142624
{
26152625
if ( !style.isEmpty() )
26162626
{
@@ -2633,6 +2643,35 @@ namespace QgsWms
26332643
return layers;
26342644
}
26352645

2646+
QgsMapLayer *QgsRenderer::createExternalWMSLayer( const QString &externalLayerId ) const
2647+
{
2648+
QgsMapLayer *wmsLayer = 0;
2649+
QgsDataSourceUri wmsUri;
2650+
2651+
QgsServerRequest::Parameters::const_iterator it = mParameters.lowerBound( externalLayerId.toUpper() + ":" );
2652+
while ( it != mParameters.constEnd() )
2653+
{
2654+
if ( !it.key().startsWith( externalLayerId.toUpper() + ":" ) )
2655+
{
2656+
break;
2657+
}
2658+
2659+
QString paramKey = it.key();
2660+
paramKey.remove( 0, externalLayerId.size() + 1 );
2661+
wmsUri.setParam( paramKey.toLower(), it.value() );
2662+
++it;
2663+
}
2664+
2665+
wmsLayer = new QgsRasterLayer( wmsUri.encodedUri(), externalLayerId, QStringLiteral( "wms" ) );
2666+
if ( !wmsLayer->isValid() )
2667+
{
2668+
delete wmsLayer;
2669+
return 0;
2670+
}
2671+
2672+
return wmsLayer;
2673+
}
2674+
26362675
QPainter *QgsRenderer::layersRendering( const QgsMapSettings &mapSettings, QImage &image, HitTest *hitTest ) const
26372676
{
26382677
QPainter *painter = nullptr;

src/server/services/wms/qgswmsrenderer.h

+3
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,9 @@ namespace QgsWms
274274
//! configure the composition for the GetPrint request
275275
bool configureComposition( QgsComposition *c, const QgsMapSettings &mapSettings );
276276

277+
//! Creates external WMS layer. Caller takes ownership
278+
QgsMapLayer *createExternalWMSLayer( const QString &externalLayerId ) const;
279+
277280
private:
278281

279282
const QgsServerRequest::Parameters &mParameters;

0 commit comments

Comments
 (0)