@@ -2610,7 +2610,17 @@ namespace QgsWms
2610
2610
{
2611
2611
QString nickname = param.mNickname ;
2612
2612
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 ) )
2614
2624
{
2615
2625
if ( !style.isEmpty () )
2616
2626
{
@@ -2633,6 +2643,35 @@ namespace QgsWms
2633
2643
return layers;
2634
2644
}
2635
2645
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
+
2636
2675
QPainter *QgsRenderer::layersRendering ( const QgsMapSettings &mapSettings, QImage &image, HitTest *hitTest ) const
2637
2676
{
2638
2677
QPainter *painter = nullptr ;
0 commit comments