Skip to content

Commit 8a46e2f

Browse files
committed
Update getLegendGraphics with render context
1 parent 47b4d05 commit 8a46e2f

File tree

2 files changed

+15
-38
lines changed

2 files changed

+15
-38
lines changed

src/server/services/wms/qgswmsgetlegendgraphics.cpp

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -26,19 +26,20 @@
2626

2727
namespace QgsWms
2828
{
29-
3029
void writeGetLegendGraphics( QgsServerInterface *serverIface, const QgsProject *project,
31-
const QString &version, const QgsServerRequest &request,
30+
const QString &, const QgsServerRequest &request,
3231
QgsServerResponse &response )
3332
{
34-
Q_UNUSED( version );
35-
36-
QgsServerRequest::Parameters params = request.parameters();
37-
QString format = params.value( QStringLiteral( "FORMAT" ), QStringLiteral( "PNG" ) );
33+
// get parameters from query
34+
QgsWmsParameters parameters( QUrlQuery( request.url() ) );
3835

39-
QgsWmsParameters wmsParameters( QUrlQuery( request.url() ) );
36+
// init render context
37+
QgsWmsRenderContext context( project, serverIface );
38+
context.setFlag( QgsWmsRenderContext::UseScaleDenominator );
39+
context.setParameters( parameters );
4040

4141
// Get cached image
42+
const QString format = request.parameters().value( QStringLiteral( "FORMAT" ), QStringLiteral( "PNG" ) );
4243
QgsAccessControl *accessControl = nullptr;
4344
QgsServerCacheManager *cacheManager = nullptr;
4445
#ifdef HAVE_SERVER_PYTHON_PLUGINS
@@ -79,8 +80,7 @@ namespace QgsWms
7980
}
8081
}
8182

82-
QgsRenderer renderer( serverIface, project, wmsParameters );
83-
83+
QgsRenderer renderer( context );
8484
std::unique_ptr<QImage> result( renderer.getLegendGraphics() );
8585

8686
if ( result )
@@ -99,10 +99,4 @@ namespace QgsWms
9999
QStringLiteral( "Failed to compute GetLegendGraphics image" ) );
100100
}
101101
}
102-
103-
104102
} // namespace QgsWms
105-
106-
107-
108-

src/server/services/wms/qgswmsrenderer.cpp

Lines changed: 6 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -163,36 +163,19 @@ namespace QgsWms
163163
throw QgsBadRequestException( QStringLiteral( "FormatNotSpecified" ),
164164
QStringLiteral( "FORMAT is mandatory for GetLegendGraphic operation" ) );
165165

166-
double scaleDenominator = -1;
167-
if ( ! mWmsParameters.scale().isEmpty() )
168-
scaleDenominator = mWmsParameters.scaleAsDouble();
169-
170-
QgsLegendSettings legendSettings = mWmsParameters.legendSettings();
171-
172166
// get layers
173167
std::unique_ptr<QgsLayerRestorer> restorer;
174-
restorer.reset( new QgsLayerRestorer( mNicknameLayers.values() ) );
175-
176-
QList<QgsMapLayer *> layers;
177-
QList<QgsWmsParametersLayer> params = mWmsParameters.layersParameters();
178-
179-
QString sld = mWmsParameters.sldBody();
180-
if ( !sld.isEmpty() )
181-
layers = sldStylizedLayers( sld );
182-
else
183-
layers = stylizedLayers( params );
184-
185-
removeUnwantedLayers( layers, scaleDenominator );
186-
std::reverse( layers.begin(), layers.end() );
168+
restorer.reset( new QgsLayerRestorer( mContext.layers() ) );
187169

188-
// check permissions
189-
for ( QgsMapLayer *ml : layers )
190-
checkLayerReadPermissions( ml );
170+
// configure layers
171+
QList<QgsMapLayer *> layers = mContext.layersToRender();
172+
configureLayers( layers );
191173

192174
// build layer tree model for legend
193175
QgsLayerTree rootGroup;
176+
QgsLegendSettings legendSettings = mContext.parameters().legendSettings();
194177
std::unique_ptr<QgsLayerTreeModel> legendModel;
195-
legendModel.reset( buildLegendTreeModel( layers, scaleDenominator, rootGroup ) );
178+
legendModel.reset( buildLegendTreeModel( layers, mContext.scaleDenominator(), rootGroup ) );
196179

197180
// rendering step
198181
qreal dpmm = dotsPerMm();

0 commit comments

Comments
 (0)