Skip to content

Commit 46746a3

Browse files
committedApr 9, 2019
Add method to build layer tree
1 parent bc72ff2 commit 46746a3

File tree

2 files changed

+55
-3
lines changed

2 files changed

+55
-3
lines changed
 

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

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@
1818
* (at your option) any later version. *
1919
* *
2020
***************************************************************************/
21+
#include "qgslayertree.h"
22+
#include "qgsvectorlayer.h"
23+
#include "qgsvectorlayerfeaturecounter.h"
24+
2125
#include "qgswmsutils.h"
2226
#include "qgswmsserviceexception.h"
2327
#include "qgswmsgetlegendgraphics.h"
@@ -124,5 +128,50 @@ namespace QgsWms
124128
QStringLiteral( "BBOX parameter cannot be combined with RULE." ) );
125129
}
126130
}
131+
132+
QgsLayerTreeModel *legendModel( const QgsWmsRenderContext &context, QgsLayerTree &tree )
133+
{
134+
const QgsWmsParameters parameters = context.parameters();
135+
136+
std::unique_ptr<QgsLayerTreeModel> model( new QgsLayerTreeModel( &tree ) );
137+
return model.release();
138+
}
139+
140+
QgsLayerTree *layerTree( const QgsWmsRenderContext &context )
141+
{
142+
std::unique_ptr<QgsLayerTree> tree;
143+
144+
QList<QgsVectorLayerFeatureCounter *> counters;
145+
for ( QgsMapLayer *ml : context.layersToRender() )
146+
{
147+
QgsLayerTreeLayer *lt = tree->addLayer( ml );
148+
149+
// name
150+
if ( !ml->title().isEmpty() )
151+
lt->setName( ml->title() );
152+
153+
//show feature count
154+
const bool showFeatureCount = context.parameters().showFeatureCountAsBool();
155+
const QString property = QStringLiteral( "showFeatureCount" );
156+
lt->setCustomProperty( property, showFeatureCount );
157+
158+
if ( ml->type() != QgsMapLayerType::VectorLayer || !showFeatureCount )
159+
continue;
160+
161+
QgsVectorLayer *vl = qobject_cast<QgsVectorLayer *>( ml );
162+
QgsVectorLayerFeatureCounter *counter = vl->countSymbolFeatures();
163+
if ( !counter )
164+
continue;
165+
166+
counters.append( counter );
167+
}
168+
169+
for ( QgsVectorLayerFeatureCounter *counter : counters )
170+
{
171+
counter->waitForFinished();
172+
}
173+
174+
return tree.release();
175+
}
127176
} // namespace QgsWms
128177

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@
1818
* (at your option) any later version. *
1919
* *
2020
***************************************************************************/
21+
#include "qgslayertreemodel.h"
22+
23+
#include "qgswmsrendercontext.h"
2124

2225
namespace QgsWms
2326
{
@@ -30,8 +33,8 @@ namespace QgsWms
3033
QgsServerResponse &response );
3134

3235
void checkParameters( const QgsWmsParameters &parameters );
33-
} // namespace QgsWms
34-
35-
3636

37+
QgsLayerTreeModel *legendModel( const QgsWmsRenderContext &context, QgsLayerTree &tree );
3738

39+
QgsLayerTree *layerTree( const QgsWmsRenderContext &context );
40+
} // namespace QgsWms

0 commit comments

Comments
 (0)
Please sign in to comment.