QGIS API Documentation  3.8.0-Zanzibar (11aff65)
qgspointdistancerenderer.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgspointdistancerenderer.cpp
3  ----------------------------
4  begin : January 26, 2010
5  copyright : (C) 2010 by Marco Hugentobler
6  email : marco at hugis dot net
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
11  * This program is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU General Public License as published by *
13  * the Free Software Foundation; either version 2 of the License, or *
14  * (at your option) any later version. *
15  * *
16  ***************************************************************************/
17 
18 #ifndef QGSPOINTDISTANCERENDERER_H
19 #define QGSPOINTDISTANCERENDERER_H
20 
21 #include "qgis_core.h"
22 #include "qgis.h"
23 #include "qgsrenderer.h"
24 #include <QFont>
25 
26 class QgsSpatialIndex;
27 
39 {
40  public:
41 
44  {
45 
53  GroupedFeature( const QgsFeature &feature, QgsMarkerSymbol *symbol SIP_TRANSFER, bool isSelected, const QString &label = QString() )
54  : feature( feature )
55  , isSelected( isSelected )
56  , label( label )
57  , mSymbol( symbol )
58  {}
59 
62 
64  QgsMarkerSymbol *symbol() const { return mSymbol.get(); }
65 
67  bool isSelected;
68 
70  QString label;
71 
72  private:
73  std::shared_ptr< QgsMarkerSymbol > mSymbol;
74  };
75 
77  typedef QList< QgsPointDistanceRenderer::GroupedFeature > ClusteredGroup;
78 
84  QgsPointDistanceRenderer( const QString &rendererName, const QString &labelAttributeName = QString() );
85 
86  void toSld( QDomDocument &doc, QDomElement &element, const QgsStringMap &props = QgsStringMap() ) const override;
87  bool renderFeature( const QgsFeature &feature, QgsRenderContext &context, int layer = -1, bool selected = false, bool drawVertexMarker = false ) override SIP_THROW( QgsCsException );
88  QSet<QString> usedAttributes( const QgsRenderContext &context ) const override;
89  bool filterNeedsGeometry() const override;
90  QgsFeatureRenderer::Capabilities capabilities() override;
91  QgsSymbolList symbols( QgsRenderContext &context ) const override;
92  QgsSymbol *symbolForFeature( const QgsFeature &feature, QgsRenderContext &context ) const override;
93  QgsSymbol *originalSymbolForFeature( const QgsFeature &feature, QgsRenderContext &context ) const override;
94  QgsSymbolList symbolsForFeature( const QgsFeature &feature, QgsRenderContext &context ) const override;
95  QgsSymbolList originalSymbolsForFeature( const QgsFeature &feature, QgsRenderContext &context ) const override;
96  QSet< QString > legendKeysForFeature( const QgsFeature &feature, QgsRenderContext &context ) const override;
97  bool willRenderFeature( const QgsFeature &feature, QgsRenderContext &context ) const override;
98  void startRender( QgsRenderContext &context, const QgsFields &fields ) override;
99  void stopRender( QgsRenderContext &context ) override;
100  QgsLegendSymbolList legendSymbolItems() const override;
101  void setEmbeddedRenderer( QgsFeatureRenderer *r SIP_TRANSFER ) override;
102  const QgsFeatureRenderer *embeddedRenderer() const override;
103  void setLegendSymbolItem( const QString &key, QgsSymbol *symbol SIP_TRANSFER ) override;
104  bool legendSymbolItemsCheckable() const override;
105  bool legendSymbolItemChecked( const QString &key ) override;
106  void checkLegendSymbolItem( const QString &key, bool state ) override;
107  QString filter( const QgsFields &fields = QgsFields() ) override;
108 
117  void setLabelAttributeName( const QString &name ) { mLabelAttributeName = name; }
118 
127  QString labelAttributeName() const { return mLabelAttributeName; }
128 
136  void setLabelFont( const QFont &font ) { mLabelFont = font; }
137 
144  QFont labelFont() const { return mLabelFont;}
145 
152  void setMinimumLabelScale( double scale ) { mMinLabelScale = scale; }
153 
160  double minimumLabelScale() const { return mMinLabelScale; }
161 
169  void setLabelColor( const QColor &color ) { mLabelColor = color;}
170 
177  QColor labelColor() const { return mLabelColor; }
178 
186  void setTolerance( double distance ) { mTolerance = distance; }
187 
194  double tolerance() const { return mTolerance; }
195 
203  void setToleranceUnit( QgsUnitTypes::RenderUnit unit ) { mToleranceUnit = unit; }
204 
211  QgsUnitTypes::RenderUnit toleranceUnit() const { return mToleranceUnit; }
212 
220  void setToleranceMapUnitScale( const QgsMapUnitScale &scale ) { mToleranceMapUnitScale = scale; }
221 
228  const QgsMapUnitScale &toleranceMapUnitScale() const { return mToleranceMapUnitScale; }
229 
230  protected:
231 
233  std::unique_ptr< QgsFeatureRenderer > mRenderer;
234 
237 
240 
242  double mTolerance;
247 
249  QFont mLabelFont;
251  QColor mLabelColor;
255  double mMinLabelScale = 0;
256 
258  QList<ClusteredGroup> mClusteredGroups;
259 
261  QMap<QgsFeatureId, int> mGroupIndex;
262 
264  QMap<QgsFeatureId, QgsPointXY > mGroupLocations;
265 
267  QgsSpatialIndex *mSpatialIndex = nullptr;
268 
277  void drawLabels( QPointF centerPoint, QgsSymbolRenderContext &context, const QList<QPointF> &labelShifts, const ClusteredGroup &group );
278 
279  private:
280 
287  virtual void drawGroup( QPointF centerPoint, QgsRenderContext &context, const ClusteredGroup &group ) = 0 SIP_FORCE;
288 
290  QgsRectangle searchRect( const QgsPointXY &p, double distance ) const;
291 
293  void printGroupInfo() const;
294 
296  QString getLabel( const QgsFeature &feature ) const;
297 
299  void drawGroup( const ClusteredGroup &group, QgsRenderContext &context );
300 
306  QgsMarkerSymbol *firstSymbolForFeature( const QgsFeature &feature, QgsRenderContext &context );
307 
313  QgsExpressionContextScope *createGroupScope( const ClusteredGroup &group ) const;
314 
315 };
316 
317 #endif // QGSPOINTDISTANCERENDERER_H
An abstract base class for distance based point renderers (e.g., clusterer and displacement renderers...
A rectangle specified with double values.
Definition: qgsrectangle.h:41
QString mLabelAttributeName
Attribute name for labeling. An empty string indicates that no labels should be rendered.
double minimumLabelScale() const
Returns the minimum map scale (i.e.
QList< QgsLegendSymbolItem > QgsLegendSymbolList
QgsUnitTypes::RenderUnit mToleranceUnit
Unit for distance tolerance.
Abstract base class for all rendered symbols.
Definition: qgssymbol.h:61
void setLabelFont(const QFont &font)
Sets the font used for labeling points.
GroupedFeature(const QgsFeature &feature, QgsMarkerSymbol *symbol, bool isSelected, const QString &label=QString())
Constructor for GroupedFeature.
A class to represent a 2D point.
Definition: qgspointxy.h:43
void setTolerance(double distance)
Sets the tolerance distance for grouping points.
void setLabelColor(const QColor &color)
Sets the color to use for for labeling points.
void setToleranceMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the distance tolerance.
void setToleranceUnit(QgsUnitTypes::RenderUnit unit)
Sets the units for the tolerance distance.
Container of fields for a vector layer.
Definition: qgsfields.h:42
QMap< QgsFeatureId, int > mGroupIndex
Mapping of feature ID to the feature&#39;s group index.
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
Definition: qgsfeature.h:55
QString labelAttributeName() const
Returns the attribute name used for labeling points, or an empty string if no labeling will be done b...
QMap< QString, QString > QgsStringMap
Definition: qgis.h:587
QgsUnitTypes::RenderUnit toleranceUnit() const
Returns the units for the tolerance distance.
A marker symbol type, for rendering Point and MultiPoint geometries.
Definition: qgssymbol.h:766
bool mDrawLabels
Whether labels should be drawn for points. This is set internally from startRender() depending on sca...
QFont labelFont() const
Returns the font used for labeling points.
QList< QgsSymbol * > QgsSymbolList
Definition: qgsrenderer.h:43
bool isSelected
True if feature is selected and should be rendered in a selected state.
double mTolerance
Distance tolerance. Points that are closer together than this distance are considered clustered...
QMap< QgsFeatureId, QgsPointXY > mGroupLocations
Mapping of feature ID to approximate group location.
#define SIP_FORCE
Definition: qgis_sip.h:124
#define SIP_TRANSFER
Definition: qgis_sip.h:36
QColor mLabelColor
Label text color.
Single scope for storing variables and functions for use within a QgsExpressionContext.
QgsMapUnitScale mToleranceMapUnitScale
Map unit scale for distance tolerance.
double tolerance() const
Returns the tolerance distance for grouping points.
const QgsMapUnitScale & toleranceMapUnitScale() const
Returns the map unit scale object for the distance tolerance.
Contains properties for a feature within a clustered group.
QgsMarkerSymbol * symbol() const
Base symbol for rendering feature.
Contains information about the context of a rendering operation.
A spatial index for QgsFeature objects.
Struct for storing maximum and minimum scales for measurements in map units.
void setMinimumLabelScale(double scale)
Sets the minimum map scale (i.e.
std::unique_ptr< QgsFeatureRenderer > mRenderer
Embedded base renderer. This can be used for rendering individual, isolated points.
QList< QgsPointDistanceRenderer::GroupedFeature > ClusteredGroup
A group of clustered points (ie features within the distance tolerance).
#define SIP_THROW(name)
Definition: qgis_sip.h:177
Custom exception class for Coordinate Reference System related exceptions.
Definition: qgsexception.h:65
QList< ClusteredGroup > mClusteredGroups
Groups of features that are considered clustered together.
int mLabelIndex
Label attribute index (or -1 if none). This index is not stored, it is requested in the startRender()...
RenderUnit
Rendering size units.
Definition: qgsunittypes.h:111
QColor labelColor() const
Returns the color used for for labeling points.