QGIS API Documentation  3.4.15-Madeira (e83d02e274)
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...
QgsUnitTypes::RenderUnit toleranceUnit() const
Returns the units for the tolerance distance.
A rectangle specified with double values.
Definition: qgsrectangle.h:40
QString mLabelAttributeName
Attribute name for labeling. An empty string indicates that no labels should be rendered.
QList< QgsLegendSymbolItem > QgsLegendSymbolList
QgsUnitTypes::RenderUnit mToleranceUnit
Unit for distance tolerance.
Abstract base class for all rendered symbols.
Definition: qgssymbol.h:61
const QgsMapUnitScale & toleranceMapUnitScale() const
Returns the map unit scale object for the distance tolerance.
double minimumLabelScale() const
Returns the minimum map scale (i.e.
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
QMap< QString, QString > QgsStringMap
Definition: qgis.h:577
A marker symbol type, for rendering Point and MultiPoint geometries.
Definition: qgssymbol.h:732
QString labelAttributeName() const
Returns the attribute name used for labeling points, or an empty string if no labeling will be done b...
bool mDrawLabels
Whether labels should be drawn for points. This is set internally from startRender() depending on sca...
QColor labelColor() const
Returns the color used for 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.
QFont labelFont() const
Returns the font used for labeling points.
Contains properties for a feature within a clustered group.
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()...
QgsMarkerSymbol * symbol() const
Base symbol for rendering feature.
double tolerance() const
Returns the tolerance distance for grouping points.
RenderUnit
Rendering size units.
Definition: qgsunittypes.h:110