Support external WMS layers in GetPrint and GetMap requests

This commit is contained in:
Marco Hugentobler 2017-10-17 12:00:04 +02:00
parent f579f1a449
commit 40201b2ef5
2 changed files with 43 additions and 1 deletions

View File

@ -2610,7 +2610,17 @@ namespace QgsWms
{
QString nickname = param.mNickname;
QString style = param.mStyle;
if ( mNicknameLayers.contains( nickname ) && !mRestrictedLayers.contains( nickname ) )
if ( nickname.startsWith( "EXTERNAL_WMS:" ) )
{
QString externalLayerId = nickname;
externalLayerId.remove( 0, 13 );
QgsMapLayer *externalWMSLayer = createExternalWMSLayer( externalLayerId );
if ( externalWMSLayer )
{
layers.append( externalWMSLayer );
}
}
else if ( mNicknameLayers.contains( nickname ) && !mRestrictedLayers.contains( nickname ) )
{
if ( !style.isEmpty() )
{
@ -2633,6 +2643,35 @@ namespace QgsWms
return layers;
}
QgsMapLayer *QgsRenderer::createExternalWMSLayer( const QString &externalLayerId ) const
{
QgsMapLayer *wmsLayer = 0;
QgsDataSourceUri wmsUri;
QgsServerRequest::Parameters::const_iterator it = mParameters.lowerBound( externalLayerId.toUpper() + ":" );
while ( it != mParameters.constEnd() )
{
if ( !it.key().startsWith( externalLayerId.toUpper() + ":" ) )
{
break;
}
QString paramKey = it.key();
paramKey.remove( 0, externalLayerId.size() + 1 );
wmsUri.setParam( paramKey.toLower(), it.value() );
++it;
}
wmsLayer = new QgsRasterLayer( wmsUri.encodedUri(), externalLayerId, QStringLiteral( "wms" ) );
if ( !wmsLayer->isValid() )
{
delete wmsLayer;
return 0;
}
return wmsLayer;
}
QPainter *QgsRenderer::layersRendering( const QgsMapSettings &mapSettings, QImage &image, HitTest *hitTest ) const
{
QPainter *painter = nullptr;

View File

@ -274,6 +274,9 @@ namespace QgsWms
//! configure the composition for the GetPrint request
bool configureComposition( QgsComposition *c, const QgsMapSettings &mapSettings );
//! Creates external WMS layer. Caller takes ownership
QgsMapLayer *createExternalWMSLayer( const QString &externalLayerId ) const;
private:
const QgsServerRequest::Parameters &mParameters;