Skip to content

Commit

Permalink
Update getLegendGraphics with render context
Browse files Browse the repository at this point in the history
  • Loading branch information
pblottiere committed Mar 27, 2019
1 parent 47b4d05 commit 8a46e2f
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 38 deletions.
24 changes: 9 additions & 15 deletions src/server/services/wms/qgswmsgetlegendgraphics.cpp
Expand Up @@ -26,19 +26,20 @@


namespace QgsWms namespace QgsWms
{ {

void writeGetLegendGraphics( QgsServerInterface *serverIface, const QgsProject *project, void writeGetLegendGraphics( QgsServerInterface *serverIface, const QgsProject *project,
const QString &version, const QgsServerRequest &request, const QString &, const QgsServerRequest &request,
QgsServerResponse &response ) QgsServerResponse &response )
{ {
Q_UNUSED( version ); // get parameters from query

QgsWmsParameters parameters( QUrlQuery( request.url() ) );
QgsServerRequest::Parameters params = request.parameters();
QString format = params.value( QStringLiteral( "FORMAT" ), QStringLiteral( "PNG" ) );


QgsWmsParameters wmsParameters( QUrlQuery( request.url() ) ); // init render context
QgsWmsRenderContext context( project, serverIface );
context.setFlag( QgsWmsRenderContext::UseScaleDenominator );
context.setParameters( parameters );


// Get cached image // Get cached image
const QString format = request.parameters().value( QStringLiteral( "FORMAT" ), QStringLiteral( "PNG" ) );
QgsAccessControl *accessControl = nullptr; QgsAccessControl *accessControl = nullptr;
QgsServerCacheManager *cacheManager = nullptr; QgsServerCacheManager *cacheManager = nullptr;
#ifdef HAVE_SERVER_PYTHON_PLUGINS #ifdef HAVE_SERVER_PYTHON_PLUGINS
Expand Down Expand Up @@ -79,8 +80,7 @@ namespace QgsWms
} }
} }


QgsRenderer renderer( serverIface, project, wmsParameters ); QgsRenderer renderer( context );

std::unique_ptr<QImage> result( renderer.getLegendGraphics() ); std::unique_ptr<QImage> result( renderer.getLegendGraphics() );


if ( result ) if ( result )
Expand All @@ -99,10 +99,4 @@ namespace QgsWms
QStringLiteral( "Failed to compute GetLegendGraphics image" ) ); QStringLiteral( "Failed to compute GetLegendGraphics image" ) );
} }
} }


} // namespace QgsWms } // namespace QgsWms




29 changes: 6 additions & 23 deletions src/server/services/wms/qgswmsrenderer.cpp
Expand Up @@ -163,36 +163,19 @@ namespace QgsWms
throw QgsBadRequestException( QStringLiteral( "FormatNotSpecified" ), throw QgsBadRequestException( QStringLiteral( "FormatNotSpecified" ),
QStringLiteral( "FORMAT is mandatory for GetLegendGraphic operation" ) ); QStringLiteral( "FORMAT is mandatory for GetLegendGraphic operation" ) );


double scaleDenominator = -1;
if ( ! mWmsParameters.scale().isEmpty() )
scaleDenominator = mWmsParameters.scaleAsDouble();

QgsLegendSettings legendSettings = mWmsParameters.legendSettings();

// get layers // get layers
std::unique_ptr<QgsLayerRestorer> restorer; std::unique_ptr<QgsLayerRestorer> restorer;
restorer.reset( new QgsLayerRestorer( mNicknameLayers.values() ) ); restorer.reset( new QgsLayerRestorer( mContext.layers() ) );

QList<QgsMapLayer *> layers;
QList<QgsWmsParametersLayer> params = mWmsParameters.layersParameters();

QString sld = mWmsParameters.sldBody();
if ( !sld.isEmpty() )
layers = sldStylizedLayers( sld );
else
layers = stylizedLayers( params );

removeUnwantedLayers( layers, scaleDenominator );
std::reverse( layers.begin(), layers.end() );


// check permissions // configure layers
for ( QgsMapLayer *ml : layers ) QList<QgsMapLayer *> layers = mContext.layersToRender();
checkLayerReadPermissions( ml ); configureLayers( layers );


// build layer tree model for legend // build layer tree model for legend
QgsLayerTree rootGroup; QgsLayerTree rootGroup;
QgsLegendSettings legendSettings = mContext.parameters().legendSettings();
std::unique_ptr<QgsLayerTreeModel> legendModel; std::unique_ptr<QgsLayerTreeModel> legendModel;
legendModel.reset( buildLegendTreeModel( layers, scaleDenominator, rootGroup ) ); legendModel.reset( buildLegendTreeModel( layers, mContext.scaleDenominator(), rootGroup ) );


// rendering step // rendering step
qreal dpmm = dotsPerMm(); qreal dpmm = dotsPerMm();
Expand Down

0 comments on commit 8a46e2f

Please sign in to comment.