Skip to content

Commit a48474d

Browse files
authoredApr 22, 2020
Merge pull request #35277 from rldhont/server-wms-getprint-group-layer
[Tests][Server] WMS GetPrint group
2 parents 78639b8 + a06984c commit a48474d

File tree

7 files changed

+2286
-2160
lines changed

7 files changed

+2286
-2160
lines changed
 

‎src/server/services/wms/qgswmsrendercontext.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,19 @@ bool QgsWmsRenderContext::isValidLayer( const QString &nickname ) const
287287
return layer( nickname ) != nullptr;
288288
}
289289

290+
QList<QgsMapLayer *> QgsWmsRenderContext::layersFromGroup( const QString &nickname ) const
291+
{
292+
QList<QgsMapLayer *> layers;
293+
if ( mLayerGroups.contains( nickname ) )
294+
{
295+
for ( QgsMapLayer *layer : mLayerGroups[nickname] )
296+
{
297+
layers.append( layer );
298+
}
299+
}
300+
return layers;
301+
}
302+
290303
bool QgsWmsRenderContext::isValidGroup( const QString &name ) const
291304
{
292305
return mLayerGroups.contains( name );

‎src/server/services/wms/qgswmsrendercontext.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,12 @@ namespace QgsWms
178178
*/
179179
bool isValidLayer( const QString &nickname ) const;
180180

181+
/**
182+
* Returns the group's layers list corresponding to the nickname, or
183+
* an empty list if not found.
184+
*/
185+
QList<QgsMapLayer *> layersFromGroup( const QString &nickname ) const;
186+
181187
/**
182188
* Returns true if \a name is a group.
183189
*/

‎src/server/services/wms/qgswmsrenderer.cpp

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -611,15 +611,38 @@ namespace QgsWms
611611
QList<QgsMapLayer *> layerSet;
612612
for ( auto layer : cMapParams.mLayers )
613613
{
614-
QgsMapLayer *mlayer = mContext.layer( layer.mNickname );
615-
616-
if ( ! mlayer )
614+
if ( mContext.isValidGroup( layer.mNickname ) )
617615
{
618-
continue;
616+
QList<QgsMapLayer *> layersFromGroup;
617+
618+
for ( QgsMapLayer *layer : mContext.layersFromGroup( layer.mNickname ) )
619+
{
620+
621+
if ( ! layer )
622+
{
623+
continue;
624+
}
625+
626+
layersFromGroup.push_front( layer );
627+
}
628+
629+
if ( !layersFromGroup.isEmpty() )
630+
{
631+
layerSet.append( layersFromGroup );
632+
}
619633
}
634+
else
635+
{
636+
QgsMapLayer *mlayer = mContext.layer( layer.mNickname );
620637

621-
setLayerStyle( mlayer, layer.mStyle );
622-
layerSet << mlayer;
638+
if ( ! mlayer )
639+
{
640+
continue;
641+
}
642+
643+
setLayerStyle( mlayer, layer.mStyle );
644+
layerSet << mlayer;
645+
}
623646
}
624647

625648
layerSet << externalLayers( cMapParams.mExternalLayers );

‎tests/src/python/test_qgsserver_wms_getprint.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,48 @@ def test_wms_getprint_style(self):
355355
r, h = self._result(self._execute_request(qs))
356356
self._img_diff_error(r, h, "WMS_GetPrint_StyleCustom")
357357

358+
def test_wms_getprint_group(self):
359+
qs = "?" + "&".join(["%s=%s" % i for i in list({
360+
"MAP": urllib.parse.quote(self.projectGroupsPath),
361+
"SERVICE": "WMS",
362+
"VERSION": "1.1.1",
363+
"REQUEST": "GetPrint",
364+
"TEMPLATE": "layoutA4",
365+
"FORMAT": "png",
366+
"map0:EXTENT": "-33626185.498,-13032965.185,33978427.737,16020257.031",
367+
"map0:LAYERS": "Country_Diagrams,Country_Labels,Country",
368+
"CRS": "EPSG:3857"
369+
}.items())])
370+
371+
r_individual, _ = self._result(self._execute_request(qs))
372+
373+
qs = "?" + "&".join(["%s=%s" % i for i in list({
374+
"MAP": urllib.parse.quote(self.projectGroupsPath),
375+
"SERVICE": "WMS",
376+
"VERSION": "1.1.1",
377+
"REQUEST": "GetPrint",
378+
"TEMPLATE": "layoutA4",
379+
"FORMAT": "png",
380+
"map0:EXTENT": "-33626185.498,-13032965.185,33978427.737,16020257.031",
381+
"map0:LAYERS": "CountryGroup",
382+
"CRS": "EPSG:3857"
383+
}.items())])
384+
385+
r_group, h = self._result(self._execute_request(qs))
386+
387+
""" Debug check:
388+
f = open('grouped.png', 'wb+')
389+
f.write(r_group)
390+
f.close()
391+
f = open('individual.png', 'wb+')
392+
f.write(r_individual)
393+
f.close()
394+
#"""
395+
396+
self.assertEqual(r_individual, r_group, 'Individual layers query and group layers query results should be identical')
397+
398+
self._img_diff_error(r_group, h, "WMS_GetPrint_Group")
399+
358400
def test_wms_getprint_legend(self):
359401
qs = "?" + "&".join(["%s=%s" % i for i in list({
360402
"MAP": urllib.parse.quote(self.projectPath),
Loading
Loading

‎tests/testdata/qgis_server_accesscontrol/project_groups.qgs

Lines changed: 2196 additions & 2154 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)
Please sign in to comment.