QGIS API Documentation  3.21.0-Master (5b68dc587e)
qgsheatmaprenderer.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsheatmaprenderer.h
3  ---------------------
4  begin : November 2014
5  copyright : (C) 2014 Nyall Dawson
6  email : nyall dot dawson at gmail dot com
7  ***************************************************************************
8  * *
9  * This program is free software; you can redistribute it and/or modify *
10  * it under the terms of the GNU General Public License as published by *
11  * the Free Software Foundation; either version 2 of the License, or *
12  * (at your option) any later version. *
13  * *
14  ***************************************************************************/
15 #ifndef QGSHEATMAPRENDERER_H
16 #define QGSHEATMAPRENDERER_H
17 
18 #include "qgis_core.h"
19 #include "qgis_sip.h"
20 #include "qgsrenderer.h"
21 #include "qgsexpression.h"
22 #include "qgsgeometry.h"
23 #include "qgsmapunitscale.h"
24 
25 class QgsColorRamp;
26 
33 class CORE_EXPORT QgsHeatmapRenderer : public QgsFeatureRenderer
34 {
35  public:
36 
38  ~QgsHeatmapRenderer() override;
39 
44 
45  //reimplemented methods
46  QgsHeatmapRenderer *clone() const override SIP_FACTORY;
47  void startRender( QgsRenderContext &context, const QgsFields &fields ) override;
48  bool renderFeature( const QgsFeature &feature, QgsRenderContext &context, int layer = -1, bool selected = false, bool drawVertexMarker = false ) override SIP_THROW( QgsCsException );
49  void stopRender( QgsRenderContext &context ) override;
51  QgsSymbol *symbolForFeature( const QgsFeature &feature, QgsRenderContext &context ) const override;
53  QgsSymbolList symbols( QgsRenderContext &context ) const override;
54  QString dump() const override;
55  QSet<QString> usedAttributes( const QgsRenderContext &context ) const override;
57  static QgsFeatureRenderer *create( QDomElement &element, const QgsReadWriteContext &context ) SIP_FACTORY;
58  QDomElement save( QDomDocument &doc, const QgsReadWriteContext &context ) override;
59  static QgsHeatmapRenderer *convertFromRenderer( const QgsFeatureRenderer *renderer ) SIP_FACTORY;
60  bool accept( QgsStyleEntityVisitorInterface *visitor ) const override;
61 
62  //reimplemented to extent the request so that points up to heatmap's radius distance outside
63  //visible area are included
64  void modifyRequestExtent( QgsRectangle &extent, QgsRenderContext &context ) override;
65 
66  //heatmap specific methods
67 
73  QgsColorRamp *colorRamp() const { return mGradientRamp; }
74 
80  void setColorRamp( QgsColorRamp *ramp SIP_TRANSFER );
81 
89  double radius() const { return mRadius; }
90 
98  void setRadius( const double radius ) { mRadius = radius; }
99 
107  QgsUnitTypes::RenderUnit radiusUnit() const { return mRadiusUnit; }
108 
116  void setRadiusUnit( const QgsUnitTypes::RenderUnit unit ) { mRadiusUnit = unit; }
117 
125  const QgsMapUnitScale &radiusMapUnitScale() const { return mRadiusMapUnitScale; }
126 
134  void setRadiusMapUnitScale( const QgsMapUnitScale &scale ) { mRadiusMapUnitScale = scale; }
135 
142  double maximumValue() const { return mExplicitMax; }
143 
150  void setMaximumValue( const double value ) { mExplicitMax = value; }
151 
158  double renderQuality() const { return mRenderQuality; }
159 
166  void setRenderQuality( const int quality ) { mRenderQuality = quality; }
167 
173  QString weightExpression() const { return mWeightExpressionString; }
174 
180  void setWeightExpression( const QString &expression ) { mWeightExpressionString = expression; }
181 
182  private:
183 
184  QVector<double> mValues;
185 
186  double mCalculatedMaxValue = 0;
187 
188  double mRadius = 10;
189  int mRadiusPixels = 0;
190  double mRadiusSquared = 0;
192  QgsMapUnitScale mRadiusMapUnitScale;
193 
194  QString mWeightExpressionString;
195  int mWeightAttrNum = -1;
196  std::unique_ptr<QgsExpression> mWeightExpression;
197 
198  QgsColorRamp *mGradientRamp = nullptr;
199 
200  double mExplicitMax = 0.0;
201  int mRenderQuality = 3;
202 
203  int mFeaturesRendered = 0;
204 
205  double uniformKernel( double distance, int bandwidth ) const;
206  double quarticKernel( double distance, int bandwidth ) const;
207  double triweightKernel( double distance, int bandwidth ) const;
208  double epanechnikovKernel( double distance, int bandwidth ) const;
209  double triangularKernel( double distance, int bandwidth ) const;
210 
211  QgsMultiPointXY convertToMultipoint( const QgsGeometry *geom );
212  void initializeValues( QgsRenderContext &context );
213  void renderImage( QgsRenderContext &context );
214 };
215 
216 
217 #endif // QGSHEATMAPRENDERER_H
Abstract base class for color ramps.
Definition: qgscolorramp.h:32
Custom exception class for Coordinate Reference System related exceptions.
Definition: qgsexception.h:66
virtual QgsFeatureRenderer * clone() const =0
Create a deep copy of this renderer.
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Definition: qgsfeature.h:56
Container of fields for a vector layer.
Definition: qgsfields.h:45
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:124
A renderer which draws points as a live heatmap.
QString weightExpression() const
Returns the expression used for weighting points when generating the heatmap.
QgsUnitTypes::RenderUnit radiusUnit() const
Returns the units used for the heatmap's radius.
QgsHeatmapRenderer & operator=(const QgsHeatmapRenderer &)=delete
Direct copies are forbidden. Use clone() instead.
void setRadius(const double radius)
Sets the radius for the heatmap.
double maximumValue() const
Returns the maximum value used for shading the heatmap.
double renderQuality() const
Returns the render quality used for drawing the heatmap.
void setRenderQuality(const int quality)
Sets the render quality used for drawing the heatmap.
const QgsMapUnitScale & radiusMapUnitScale() const
Returns the map unit scale used for the heatmap's radius.
double radius() const
Returns the radius for the heatmap.
QgsHeatmapRenderer(const QgsHeatmapRenderer &)=delete
Direct copies are forbidden. Use clone() instead.
void setWeightExpression(const QString &expression)
Sets the expression used for weighting points when generating the heatmap.
void setMaximumValue(const double value)
Sets the maximum value used for shading the heatmap.
void setRadiusUnit(const QgsUnitTypes::RenderUnit unit)
Sets the units used for the heatmap's radius.
void setRadiusMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale used for the heatmap's radius.
Struct for storing maximum and minimum scales for measurements in map units.
The class is used as a container of context for various read/write operations on other objects.
A rectangle specified with double values.
Definition: qgsrectangle.h:42
Contains information about the context of a rendering operation.
An interface for classes which can visit style entity (e.g.
Abstract base class for all rendered symbols.
Definition: qgssymbol.h:38
RenderUnit
Rendering size units.
Definition: qgsunittypes.h:168
@ RenderMillimeters
Millimeters.
Definition: qgsunittypes.h:169
#define SIP_THROW(name)
Definition: qgis_sip.h:189
#define SIP_TRANSFER
Definition: qgis_sip.h:36
#define SIP_FACTORY
Definition: qgis_sip.h:76
QVector< QgsPointXY > QgsMultiPointXY
A collection of QgsPoints that share a common collection of attributes.
Definition: qgsgeometry.h:81
QList< QgsSymbol * > QgsSymbolList
Definition: qgsrenderer.h:44