QGIS API Documentation  3.26.3-Buenos Aires (65e4edfdad)
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 "qgsmapunitscale.h"
25 #include <QFont>
26 
27 class QgsSpatialIndex;
28 class QgsMarkerSymbol;
30 
42 {
43  public:
44 
46  struct CORE_EXPORT GroupedFeature
47  {
48 
56  GroupedFeature( const QgsFeature &feature, QgsMarkerSymbol *symbol SIP_TRANSFER, bool isSelected, const QString &label = QString() );
57  ~GroupedFeature();
58 
61 
63  QgsMarkerSymbol *symbol() const { return mSymbol.get(); }
64 
66  bool isSelected;
67 
69  QString label;
70 
71  private:
72  std::shared_ptr< QgsMarkerSymbol > mSymbol;
73  };
74 
76  typedef QList< QgsPointDistanceRenderer::GroupedFeature > ClusteredGroup;
77 
83  QgsPointDistanceRenderer( const QString &rendererName, const QString &labelAttributeName = QString() );
84 
85  void toSld( QDomDocument &doc, QDomElement &element, const QVariantMap &props = QVariantMap() ) const override;
86  bool renderFeature( const QgsFeature &feature, QgsRenderContext &context, int layer = -1, bool selected = false, bool drawVertexMarker = false ) override SIP_THROW( QgsCsException );
87  QSet<QString> usedAttributes( const QgsRenderContext &context ) const override;
88  bool filterNeedsGeometry() const override;
89  QgsFeatureRenderer::Capabilities capabilities() override;
90  QgsSymbolList symbols( QgsRenderContext &context ) const override;
91  QgsSymbol *symbolForFeature( const QgsFeature &feature, QgsRenderContext &context ) const override;
92  QgsSymbol *originalSymbolForFeature( const QgsFeature &feature, QgsRenderContext &context ) const override;
93  QgsSymbolList symbolsForFeature( const QgsFeature &feature, QgsRenderContext &context ) const override;
94  QgsSymbolList originalSymbolsForFeature( const QgsFeature &feature, QgsRenderContext &context ) const override;
95  QSet< QString > legendKeysForFeature( const QgsFeature &feature, QgsRenderContext &context ) const override;
96  QString legendKeyToExpression( const QString &key, QgsVectorLayer *layer, bool &ok ) 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  bool accept( QgsStyleEntityVisitorInterface *visitor ) const override;
109 
118  void setLabelAttributeName( const QString &name ) { mLabelAttributeName = name; }
119 
128  QString labelAttributeName() const { return mLabelAttributeName; }
129 
137  void setLabelFont( const QFont &font ) { mLabelFont = font; }
138 
145  QFont labelFont() const { return mLabelFont;}
146 
153  void setMinimumLabelScale( double scale ) { mMinLabelScale = scale; }
154 
161  double minimumLabelScale() const { return mMinLabelScale; }
162 
170  void setLabelColor( const QColor &color ) { mLabelColor = color;}
171 
178  QColor labelColor() const { return mLabelColor; }
179 
187  void setTolerance( double distance ) { mTolerance = distance; }
188 
195  double tolerance() const { return mTolerance; }
196 
204  void setToleranceUnit( QgsUnitTypes::RenderUnit unit ) { mToleranceUnit = unit; }
205 
212  QgsUnitTypes::RenderUnit toleranceUnit() const { return mToleranceUnit; }
213 
221  void setToleranceMapUnitScale( const QgsMapUnitScale &scale ) { mToleranceMapUnitScale = scale; }
222 
229  const QgsMapUnitScale &toleranceMapUnitScale() const { return mToleranceMapUnitScale; }
230 
231  protected:
232 
234  std::unique_ptr< QgsFeatureRenderer > mRenderer;
235 
238 
241 
243  double mTolerance;
248 
250  QFont mLabelFont;
252  QColor mLabelColor;
256  double mMinLabelScale = 0;
257 
259  QList<ClusteredGroup> mClusteredGroups;
260 
262  QMap<QgsFeatureId, int> mGroupIndex;
263 
265  QMap<QgsFeatureId, QgsPointXY > mGroupLocations;
266 
268  QgsSpatialIndex *mSpatialIndex = nullptr;
269 
278  void drawLabels( QPointF centerPoint, QgsSymbolRenderContext &context, const QList<QPointF> &labelShifts, const ClusteredGroup &group ) const;
279 
280  private:
281 
288  virtual void drawGroup( QPointF centerPoint, QgsRenderContext &context, const ClusteredGroup &group ) const = 0 SIP_FORCE;
289 
291  QgsRectangle searchRect( const QgsPoint *p, double distance ) const;
292 
294  void printGroupInfo() const;
295 
297  QString getLabel( const QgsFeature &feature ) const;
298 
300  void drawGroup( const ClusteredGroup &group, QgsRenderContext &context ) const;
301 
307  QgsMarkerSymbol *firstSymbolForFeature( const QgsFeature &feature, QgsRenderContext &context );
308 
314  QgsExpressionContextScope *createGroupScope( const ClusteredGroup &group ) const;
315 
316 };
317 
318 #endif // QGSPOINTDISTANCERENDERER_H
QgsPointDistanceRenderer::labelAttributeName
QString labelAttributeName() const
Returns the attribute name used for labeling points, or an empty string if no labeling will be done b...
Definition: qgspointdistancerenderer.h:128
QgsUnitTypes::RenderUnit
RenderUnit
Rendering size units.
Definition: qgsunittypes.h:167
QgsPointDistanceRenderer::mGroupLocations
QMap< QgsFeatureId, QgsPointXY > mGroupLocations
Mapping of feature ID to approximate group location.
Definition: qgspointdistancerenderer.h:265
QgsPointDistanceRenderer::mToleranceUnit
QgsUnitTypes::RenderUnit mToleranceUnit
Unit for distance tolerance.
Definition: qgspointdistancerenderer.h:245
QgsPoint
Point geometry type, with support for z-dimension and m-values.
Definition: qgspoint.h:48
QgsPointDistanceRenderer::mLabelAttributeName
QString mLabelAttributeName
Attribute name for labeling. An empty string indicates that no labels should be rendered.
Definition: qgspointdistancerenderer.h:237
QgsFields
Container of fields for a vector layer.
Definition: qgsfields.h:44
qgis.h
QgsRenderContext
Contains information about the context of a rendering operation.
Definition: qgsrendercontext.h:59
QgsStyleEntityVisitorInterface
An interface for classes which can visit style entity (e.g. symbol) nodes (using the visitor pattern)...
Definition: qgsstyleentityvisitor.h:33
QgsSymbol
Abstract base class for all rendered symbols.
Definition: qgssymbol.h:92
QgsPointDistanceRenderer::mLabelFont
QFont mLabelFont
Label font.
Definition: qgspointdistancerenderer.h:250
QgsPointDistanceRenderer::toleranceMapUnitScale
const QgsMapUnitScale & toleranceMapUnitScale() const
Returns the map unit scale object for the distance tolerance.
Definition: qgspointdistancerenderer.h:229
QgsRectangle
A rectangle specified with double values.
Definition: qgsrectangle.h:41
QgsSymbolRenderContext
Definition: qgssymbolrendercontext.h:35
QgsPointDistanceRenderer::mRenderer
std::unique_ptr< QgsFeatureRenderer > mRenderer
Embedded base renderer. This can be used for rendering individual, isolated points.
Definition: qgspointdistancerenderer.h:234
QgsPointDistanceRenderer::mClusteredGroups
QList< ClusteredGroup > mClusteredGroups
Groups of features that are considered clustered together.
Definition: qgspointdistancerenderer.h:259
QgsPointDistanceRenderer::toleranceUnit
QgsUnitTypes::RenderUnit toleranceUnit() const
Returns the units for the tolerance distance.
Definition: qgspointdistancerenderer.h:212
QgsCsException
Custom exception class for Coordinate Reference System related exceptions.
Definition: qgsexception.h:65
QgsPointDistanceRenderer::setLabelColor
void setLabelColor(const QColor &color)
Sets the color to use for for labeling points.
Definition: qgspointdistancerenderer.h:170
SIP_THROW
#define SIP_THROW(name)
Definition: qgis_sip.h:198
QgsPointDistanceRenderer::mLabelIndex
int mLabelIndex
Label attribute index (or -1 if none). This index is not stored, it is requested in the startRender()...
Definition: qgspointdistancerenderer.h:240
QgsSymbolList
QList< QgsSymbol * > QgsSymbolList
Definition: qgsrenderer.h:44
QgsMarkerSymbol
A marker symbol type, for rendering Point and MultiPoint geometries.
Definition: qgsmarkersymbol.h:30
QgsPointDistanceRenderer::mLabelColor
QColor mLabelColor
Label text color.
Definition: qgspointdistancerenderer.h:252
QgsPointDistanceRenderer
An abstract base class for distance based point renderers (e.g., clusterer and displacement renderers...
Definition: qgspointdistancerenderer.h:41
QgsPointDistanceRenderer::GroupedFeature::symbol
QgsMarkerSymbol * symbol() const
Base symbol for rendering feature.
Definition: qgspointdistancerenderer.h:63
SIP_TRANSFER
#define SIP_TRANSFER
Definition: qgis_sip.h:36
QgsSpatialIndex
A spatial index for QgsFeature objects.
Definition: qgsspatialindex.h:67
QgsPointDistanceRenderer::mToleranceMapUnitScale
QgsMapUnitScale mToleranceMapUnitScale
Map unit scale for distance tolerance.
Definition: qgspointdistancerenderer.h:247
QgsMapUnitScale
Struct for storing maximum and minimum scales for measurements in map units.
Definition: qgsmapunitscale.h:36
qgsrenderer.h
QgsPointDistanceRenderer::labelColor
QColor labelColor() const
Returns the color used for for labeling points.
Definition: qgspointdistancerenderer.h:178
QgsPointDistanceRenderer::setToleranceMapUnitScale
void setToleranceMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the distance tolerance.
Definition: qgspointdistancerenderer.h:221
QgsExpressionContextScope
Single scope for storing variables and functions for use within a QgsExpressionContext....
Definition: qgsexpressioncontext.h:113
QgsPointDistanceRenderer::tolerance
double tolerance() const
Returns the tolerance distance for grouping points.
Definition: qgspointdistancerenderer.h:195
QgsPointDistanceRenderer::ClusteredGroup
QList< QgsPointDistanceRenderer::GroupedFeature > ClusteredGroup
A group of clustered points (ie features within the distance tolerance).
Definition: qgspointdistancerenderer.h:76
QgsPointDistanceRenderer::setToleranceUnit
void setToleranceUnit(QgsUnitTypes::RenderUnit unit)
Sets the units for the tolerance distance.
Definition: qgspointdistancerenderer.h:204
QgsFeatureRenderer
Definition: qgsrenderer.h:101
SIP_FORCE
#define SIP_FORCE
Definition: qgis_sip.h:131
QgsVectorLayer
Represents a vector layer which manages a vector based data sets.
Definition: qgsvectorlayer.h:391
QgsPointDistanceRenderer::GroupedFeature::label
QString label
Optional label text.
Definition: qgspointdistancerenderer.h:69
QgsPointDistanceRenderer::mDrawLabels
bool mDrawLabels
Whether labels should be drawn for points. This is set internally from startRender() depending on sca...
Definition: qgspointdistancerenderer.h:254
QgsPointDistanceRenderer::setLabelFont
void setLabelFont(const QFont &font)
Sets the font used for labeling points.
Definition: qgspointdistancerenderer.h:137
QgsPointDistanceRenderer::minimumLabelScale
double minimumLabelScale() const
Returns the minimum map scale (i.e.
Definition: qgspointdistancerenderer.h:161
QgsPointDistanceRenderer::labelFont
QFont labelFont() const
Returns the font used for labeling points.
Definition: qgspointdistancerenderer.h:145
QgsPointDistanceRenderer::setMinimumLabelScale
void setMinimumLabelScale(double scale)
Sets the minimum map scale (i.e.
Definition: qgspointdistancerenderer.h:153
QgsPointDistanceRenderer::setTolerance
void setTolerance(double distance)
Sets the tolerance distance for grouping points.
Definition: qgspointdistancerenderer.h:187
qgsmapunitscale.h
QgsFeature
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Definition: qgsfeature.h:55
QgsLegendSymbolList
QList< QgsLegendSymbolItem > QgsLegendSymbolList
Definition: qgslegendsymbolitem.h:144
QgsPointDistanceRenderer::mGroupIndex
QMap< QgsFeatureId, int > mGroupIndex
Mapping of feature ID to the feature's group index.
Definition: qgspointdistancerenderer.h:262
QgsPointDistanceRenderer::GroupedFeature::feature
QgsFeature feature
Feature.
Definition: qgspointdistancerenderer.h:60
QgsPointDistanceRenderer::mTolerance
double mTolerance
Distance tolerance. Points that are closer together than this distance are considered clustered.
Definition: qgspointdistancerenderer.h:243
QgsPointDistanceRenderer::GroupedFeature::isSelected
bool isSelected
True if feature is selected and should be rendered in a selected state.
Definition: qgspointdistancerenderer.h:66
QgsPointDistanceRenderer::GroupedFeature
Contains properties for a feature within a clustered group.
Definition: qgspointdistancerenderer.h:46