Skip to content

Commit 47b4d05

Browse files
committed
Update getMap with render context
1 parent ec06223 commit 47b4d05

File tree

2 files changed

+21
-58
lines changed

2 files changed

+21
-58
lines changed

src/server/services/wms/qgswmsgetmap.cpp

+17-7
Original file line numberDiff line numberDiff line change
@@ -28,20 +28,30 @@ namespace QgsWms
2828
{
2929

3030
void writeGetMap( QgsServerInterface *serverIface, const QgsProject *project,
31-
const QString &version, const QgsServerRequest &request,
31+
const QString &, const QgsServerRequest &request,
3232
QgsServerResponse &response )
3333
{
34-
Q_UNUSED( version );
34+
// get wms parameters from query
35+
const QgsWmsParameters parameters( QUrlQuery( request.url() ) );
3536

36-
QgsServerRequest::Parameters params = request.parameters();
37-
38-
QgsWmsParameters wmsParameters( QUrlQuery( request.url() ) );
39-
QgsRenderer renderer( serverIface, project, wmsParameters );
37+
// prepare render context
38+
QgsWmsRenderContext context( project, serverIface );
39+
context.setFlag( QgsWmsRenderContext::UpdateExtent );
40+
context.setFlag( QgsWmsRenderContext::UseOpacity );
41+
context.setFlag( QgsWmsRenderContext::UseFilter );
42+
context.setFlag( QgsWmsRenderContext::UseSelection );
43+
context.setFlag( QgsWmsRenderContext::AddHighlightLayers );
44+
context.setFlag( QgsWmsRenderContext::AddExternalLayers );
45+
context.setFlag( QgsWmsRenderContext::SetAccessControl );
46+
context.setParameters( parameters );
4047

48+
// rendering
49+
QgsRenderer renderer( context );
4150
std::unique_ptr<QImage> result( renderer.getMap() );
51+
4252
if ( result )
4353
{
44-
QString format = params.value( QStringLiteral( "FORMAT" ), QStringLiteral( "PNG" ) );
54+
const QString format = request.parameters().value( QStringLiteral( "FORMAT" ), QStringLiteral( "PNG" ) );
4555
writeImage( response, *result, format, renderer.imageQuality() );
4656
}
4757
else

src/server/services/wms/qgswmsrenderer.cpp

+4-51
Original file line numberDiff line numberDiff line change
@@ -825,59 +825,13 @@ namespace QgsWms
825825
QStringLiteral( "The requested map size is too large" ) );
826826
}
827827

828-
// get layers parameters
829-
QList<QgsMapLayer *> layers;
830-
QList<QgsWmsParametersLayer> params = mWmsParameters.layersParameters();
831-
832828
// init layer restorer before doing anything
833829
std::unique_ptr<QgsLayerRestorer> restorer;
834-
restorer.reset( new QgsLayerRestorer( mNicknameLayers.values() ) );
830+
restorer.reset( new QgsLayerRestorer( mContext.layers() ) );
835831

836-
// init stylized layers according to LAYERS/STYLES or SLD
837-
QString sld = mWmsParameters.sldBody();
838-
if ( !sld.isEmpty() )
839-
{
840-
layers = sldStylizedLayers( sld );
841-
}
842-
else
843-
{
844-
layers = stylizedLayers( params );
845-
}
846-
847-
// remove unwanted layers (restricted layers, ...)
848-
removeUnwantedLayers( layers );
849-
850-
// configure each layer with opacity, selection filter, ...
851-
bool updateMapExtent = mWmsParameters.bbox().isEmpty();
852-
for ( QgsMapLayer *layer : layers )
853-
{
854-
checkLayerReadPermissions( layer );
855-
856-
for ( const QgsWmsParametersLayer &param : params )
857-
{
858-
if ( param.mNickname == layerNickname( *layer ) )
859-
{
860-
setLayerOpacity( layer, param.mOpacity );
861-
862-
setLayerFilter( layer, param.mFilter );
863-
864-
setLayerSelection( layer, param.mSelection );
865-
866-
if ( updateMapExtent )
867-
updateExtent( layer, mapSettings );
868-
869-
break;
870-
}
871-
}
872-
873-
setLayerAccessControlFilter( layer );
874-
}
875-
876-
// add external layers
877-
layers = layers << externalLayers( mWmsParameters.externalLayersParameters() );
878-
879-
// add highlight layers above others
880-
layers = layers << highlightLayers( mWmsParameters.highlightLayersParameters() );
832+
// configure layers
833+
QList<QgsMapLayer *> layers = mContext.layersToRender();
834+
configureLayers( layers, &mapSettings );
881835

882836
// create the output image and the painter
883837
std::unique_ptr<QPainter> painter;
@@ -887,7 +841,6 @@ namespace QgsWms
887841
configureMapSettings( image.get(), mapSettings );
888842

889843
// add layers to map settings (revert order for the rendering)
890-
std::reverse( layers.begin(), layers.end() );
891844
mapSettings.setLayers( layers );
892845

893846
// rendering step for layers

0 commit comments

Comments
 (0)