Skip to content

Commit d6c7c93

Browse files
committed
Manage external layers like highlight layers for consistency
1 parent 1ab7925 commit d6c7c93

File tree

4 files changed

+87
-32
lines changed

4 files changed

+87
-32
lines changed

src/server/services/wms/qgswmsparameters.cpp

Lines changed: 49 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1408,6 +1408,10 @@ namespace QgsWms
14081408
for ( int i = 0; i < layers.size(); i++ )
14091409
{
14101410
QString layer = layers[i];
1411+
1412+
if ( layer.startsWith( QStringLiteral( "EXTERNAL_WMS:" ) ) )
1413+
continue;
1414+
14111415
QgsWmsParametersLayer param;
14121416
param.mNickname = layer;
14131417

@@ -1492,6 +1496,27 @@ namespace QgsWms
14921496
return params;
14931497
}
14941498

1499+
QList<QgsWmsParametersExternalLayer> QgsWmsParameters::externalLayersParameters() const
1500+
{
1501+
QList<QgsWmsParametersExternalLayer> externalLayers;
1502+
1503+
const QStringList layers = allLayersNickname();
1504+
for ( const QString &layer : allLayersNickname() )
1505+
{
1506+
if ( ! layer.startsWith( QStringLiteral( "EXTERNAL_WMS:" ) ) )
1507+
continue;
1508+
1509+
QgsWmsParametersExternalLayer externalLayer;
1510+
externalLayer.mName = layer;
1511+
externalLayer.mName.remove( 0, 13 );
1512+
externalLayer.mUri = externalWMSUri( externalLayer.mName );
1513+
1514+
externalLayers << externalLayer;
1515+
}
1516+
1517+
return externalLayers;
1518+
}
1519+
14951520
QString QgsWmsParameters::backgroundColor() const
14961521
{
14971522
return mWmsParameters[ QgsWmsParameter::BGCOLOR ].toString();
@@ -1577,12 +1602,34 @@ namespace QgsWms
15771602
}
15781603

15791604
//layers
1580-
QStringList layers;
1605+
QStringList allLayers;
15811606
wmsParam = idParameter( QgsWmsParameter::LAYERS, mapId );
15821607
if ( wmsParam.isValid() )
15831608
{
1584-
layers = wmsParam.toStringList();
1609+
allLayers = wmsParam.toStringList();
1610+
}
1611+
1612+
// external layers
1613+
QStringList layers;
1614+
QList<QgsWmsParametersExternalLayer> eParams;
1615+
1616+
for ( const auto &layer : allLayers )
1617+
{
1618+
if ( layer.startsWith( QStringLiteral( "EXTERNAL_WMS:" ) ) )
1619+
{
1620+
QgsWmsParametersExternalLayer externalParam;
1621+
externalParam.mName = layer;
1622+
externalParam.mName.remove( 0, 13 );
1623+
externalParam.mUri = externalWMSUri( externalParam.mName );
1624+
1625+
eParams << externalParam;
1626+
}
1627+
else
1628+
{
1629+
layers << layer;
1630+
}
15851631
}
1632+
param.mExternalLayers = eParams;
15861633

15871634
QStringList styles;
15881635
wmsParam = idParameter( QgsWmsParameter::STYLES, mapId );

src/server/services/wms/qgswmsparameters.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,12 @@ namespace QgsWms
5555
QString mStyle;
5656
};
5757

58+
struct QgsWmsParametersExternalLayer
59+
{
60+
QString mName;
61+
QString mUri;
62+
};
63+
5864
struct QgsWmsParametersHighlightLayer
5965
{
6066
QString mName;
@@ -79,6 +85,7 @@ namespace QgsWms
7985
float mGridX = 0;
8086
float mGridY = 0;
8187
QList<QgsWmsParametersLayer> mLayers; // list of layers for this composer map
88+
QList<QgsWmsParametersExternalLayer> mExternalLayers; // list of external layers for this composer map
8289
QList<QgsWmsParametersHighlightLayer> mHighlightLayers; // list of highlight layers for this composer map
8390
};
8491

@@ -944,6 +951,8 @@ namespace QgsWms
944951
*/
945952
QList<QgsWmsParametersHighlightLayer> highlightLayersParameters() const;
946953

954+
QList<QgsWmsParametersExternalLayer> externalLayersParameters() const;
955+
947956
/**
948957
* Returns HIGHLIGHT_GEOM as a list of string in WKT.
949958
* \returns highlight geometries

src/server/services/wms/qgswmsrenderer.cpp

Lines changed: 26 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -653,13 +653,14 @@ namespace QgsWms
653653

654654
if ( !map->keepLayerSet() )
655655
{
656-
if ( cMapParams.mLayers.isEmpty() )
656+
if ( cMapParams.mLayers.isEmpty() && cMapParams.mExternalLayers.isEmpty() )
657657
{
658658
map->setLayers( mapSettings.layers() );
659659
}
660660
else
661661
{
662662
QList<QgsMapLayer *> layerSet = stylizedLayers( cMapParams.mLayers );
663+
layerSet << externalLayers( cMapParams.mExternalLayers );
663664
layerSet << highlightLayers( cMapParams.mHighlightLayers );
664665
std::reverse( layerSet.begin(), layerSet.end() );
665666
map->setLayers( layerSet );
@@ -856,6 +857,9 @@ namespace QgsWms
856857
setLayerAccessControlFilter( layer );
857858
}
858859

860+
// add external layers
861+
layers = layers << externalLayers( mWmsParameters.externalLayersParameters() );
862+
859863
// add highlight layers above others
860864
layers = layers << highlightLayers( mWmsParameters.highlightLayersParameters() );
861865

@@ -2914,6 +2918,26 @@ namespace QgsWms
29142918
return highlightLayers;
29152919
}
29162920

2921+
QList<QgsMapLayer *> QgsRenderer::externalLayers( const QList<QgsWmsParametersExternalLayer> &params )
2922+
{
2923+
QList<QgsMapLayer *> layers;
2924+
2925+
for ( const QgsWmsParametersExternalLayer &param : params )
2926+
{
2927+
std::unique_ptr<QgsMapLayer> layer;
2928+
layer.reset( new QgsRasterLayer( param.mUri, param.mName, QStringLiteral( "wms" ) ) );
2929+
2930+
if ( layer->isValid() )
2931+
{
2932+
// to delete later
2933+
mTemporaryLayers.append( layer.release() );
2934+
layers << mTemporaryLayers.last();
2935+
}
2936+
}
2937+
2938+
return layers;
2939+
}
2940+
29172941
QList<QgsMapLayer *> QgsRenderer::sldStylizedLayers( const QString &sld ) const
29182942
{
29192943
QList<QgsMapLayer *> layers;
@@ -2976,19 +3000,7 @@ namespace QgsWms
29763000
{
29773001
QString nickname = param.mNickname;
29783002
QString style = param.mStyle;
2979-
if ( nickname.startsWith( "EXTERNAL_WMS:" ) )
2980-
{
2981-
QString externalLayerId = nickname;
2982-
externalLayerId.remove( 0, 13 );
2983-
QgsMapLayer *externalWMSLayer = createExternalWMSLayer( externalLayerId );
2984-
if ( externalWMSLayer )
2985-
{
2986-
layers.append( externalWMSLayer );
2987-
mNicknameLayers[nickname] = externalWMSLayer; //might be used later in GetPrint request
2988-
mTemporaryLayers.append( externalWMSLayer );
2989-
}
2990-
}
2991-
else if ( mNicknameLayers.contains( nickname ) && !mRestrictedLayers.contains( nickname ) )
3003+
if ( mNicknameLayers.contains( nickname ) && !mRestrictedLayers.contains( nickname ) )
29923004
{
29933005
if ( !style.isEmpty() )
29943006
{
@@ -3032,19 +3044,6 @@ namespace QgsWms
30323044
return layers;
30333045
}
30343046

3035-
QgsMapLayer *QgsRenderer::createExternalWMSLayer( const QString &externalLayerId ) const
3036-
{
3037-
QString wmsUri = mWmsParameters.externalWMSUri( externalLayerId.toUpper() );
3038-
QgsMapLayer *wmsLayer = new QgsRasterLayer( wmsUri, externalLayerId, QStringLiteral( "wms" ) );
3039-
if ( !wmsLayer->isValid() )
3040-
{
3041-
delete wmsLayer;
3042-
return nullptr;
3043-
}
3044-
3045-
return wmsLayer;
3046-
}
3047-
30483047
void QgsRenderer::removeTemporaryLayers()
30493048
{
30503049
qDeleteAll( mTemporaryLayers );

src/server/services/wms/qgswmsrenderer.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,9 @@ namespace QgsWms
122122
// Build and returns highlight layers
123123
QList<QgsMapLayer *> highlightLayers( QList<QgsWmsParametersHighlightLayer> params );
124124

125+
// Build and returns external layers
126+
QList<QgsMapLayer *> externalLayers( const QList<QgsWmsParametersExternalLayer> &params );
127+
125128
// Init a map with nickname for layers' project
126129
void initNicknameLayers();
127130

@@ -289,9 +292,6 @@ namespace QgsWms
289292
* */
290293
bool configurePrintLayout( QgsPrintLayout *c, const QgsMapSettings &mapSettings, bool atlasPrint = false );
291294

292-
//! Creates external WMS layer. Caller takes ownership
293-
QgsMapLayer *createExternalWMSLayer( const QString &externalLayerId ) const;
294-
295295
void removeTemporaryLayers();
296296

297297
void handlePrintErrors( const QgsLayout *layout ) const;

0 commit comments

Comments
 (0)