QGIS API Documentation 3.43.0-Master (4da382ed187)
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#include "qgis.h"
26
27class QgsColorRamp;
28
34class CORE_EXPORT QgsHeatmapRenderer : public QgsFeatureRenderer
35{
36 public:
37
39 ~QgsHeatmapRenderer() override;
40
45
46 //reimplemented methods
47 QgsHeatmapRenderer *clone() const override SIP_FACTORY;
48 void startRender( QgsRenderContext &context, const QgsFields &fields ) override;
49 bool renderFeature( const QgsFeature &feature, QgsRenderContext &context, int layer = -1, bool selected = false, bool drawVertexMarker = false ) override SIP_THROW( QgsCsException );
50 void stopRender( QgsRenderContext &context ) override;
51 QgsSymbol *symbolForFeature( const QgsFeature &feature, QgsRenderContext &context ) const override;
52 QgsSymbolList symbols( QgsRenderContext &context ) const override;
53 QString dump() const override;
54 QSet<QString> usedAttributes( const QgsRenderContext &context ) const override;
56 static QgsFeatureRenderer *create( QDomElement &element, const QgsReadWriteContext &context ) SIP_FACTORY;
57 QDomElement save( QDomDocument &doc, const QgsReadWriteContext &context ) override;
58 static QgsHeatmapRenderer *convertFromRenderer( const QgsFeatureRenderer *renderer ) SIP_FACTORY;
59 bool accept( QgsStyleEntityVisitorInterface *visitor ) const override;
60 QList<QgsLayerTreeModelLegendNode *> createLegendNodes( QgsLayerTreeLayer *nodeLayer ) const override SIP_FACTORY;
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
88 const QgsColorRampLegendNodeSettings &legendSettings() const { return mLegendSettings; }
89
96 void setLegendSettings( const QgsColorRampLegendNodeSettings &settings );
97
105 double radius() const { return mRadius; }
106
114 void setRadius( const double radius ) { mRadius = radius; }
115
123 Qgis::RenderUnit radiusUnit() const { return mRadiusUnit; }
124
132 void setRadiusUnit( const Qgis::RenderUnit unit ) { mRadiusUnit = unit; }
133
141 const QgsMapUnitScale &radiusMapUnitScale() const { return mRadiusMapUnitScale; }
142
150 void setRadiusMapUnitScale( const QgsMapUnitScale &scale ) { mRadiusMapUnitScale = scale; }
151
158 double maximumValue() const { return mExplicitMax; }
159
166 void setMaximumValue( const double value ) { mExplicitMax = value; }
167
174 double renderQuality() const { return mRenderQuality; }
175
182 void setRenderQuality( const int quality ) { mRenderQuality = quality; }
183
189 QString weightExpression() const { return mWeightExpressionString; }
190
196 void setWeightExpression( const QString &expression ) { mWeightExpressionString = expression; }
197
198 private:
199
200 QVector<double> mValues;
201
202 double mCalculatedMaxValue = 0;
203
204 double mRadius = 10;
205 int mRadiusPixels = 0;
206 double mRadiusSquared = 0;
208 QgsMapUnitScale mRadiusMapUnitScale;
209
210 QString mWeightExpressionString;
211 int mWeightAttrNum = -1;
212 std::unique_ptr<QgsExpression> mWeightExpression;
213
214 QgsColorRamp *mGradientRamp = nullptr;
215
216 double mExplicitMax = 0.0;
217 int mRenderQuality = 3;
218
219 int mFeaturesRendered = 0;
220
221 QgsColorRampLegendNodeSettings mLegendSettings;
222
223 double uniformKernel( double distance, int bandwidth ) const;
224 double quarticKernel( double distance, int bandwidth ) const;
225 double triweightKernel( double distance, int bandwidth ) const;
226 double epanechnikovKernel( double distance, int bandwidth ) const;
227 double triangularKernel( double distance, int bandwidth ) const;
228
229 QgsMultiPointXY convertToMultipoint( const QgsGeometry *geom );
230 void initializeValues( QgsRenderContext &context );
231 void renderImage( QgsRenderContext &context );
232};
233
234
235#endif // QGSHEATMAPRENDERER_H
RenderUnit
Rendering size units.
Definition qgis.h:5014
@ Millimeters
Millimeters.
Settings for a color ramp legend node.
Abstract base class for color ramps.
Custom exception class for Coordinate Reference System related exceptions.
Abstract base class for all 2D vector feature renderers.
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:58
Container of fields for a vector layer.
Definition qgsfields.h:46
A geometry is the spatial representation of a feature.
A renderer which draws points as a live heatmap.
QString weightExpression() const
Returns the expression used for weighting points when generating the heatmap.
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.
void setRadiusUnit(const Qgis::RenderUnit unit)
Sets the units used for the heatmap's radius.
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.
double radius() const
Returns the radius for the heatmap.
QgsHeatmapRenderer(const QgsHeatmapRenderer &)=delete
Direct copies are forbidden. Use clone() instead.
Qgis::RenderUnit radiusUnit() const
Returns the units used for the heatmap's radius.
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.
const QgsMapUnitScale & radiusMapUnitScale() const
Returns the map unit scale used for the heatmap's radius.
const QgsColorRampLegendNodeSettings & legendSettings() const
Returns the color ramp legend settings.
void setRadiusMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale used for the heatmap's radius.
Layer tree node points to a map layer.
An abstract interface for legend items returned from QgsMapLayerLegend implementation.
Struct for storing maximum and minimum scales for measurements in map units.
A container for the context for various read/write operations on objects.
A rectangle specified with double values.
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:231
#define SIP_TRANSFER
Definition qgis_sip.h:36
#define SIP_FACTORY
Definition qgis_sip.h:76
#define SIP_THROW(name,...)
Definition qgis_sip.h:203
QVector< QgsPointXY > QgsMultiPointXY
A collection of QgsPoints that share a common collection of attributes.
Definition qgsgeometry.h:80
QList< QgsSymbol * > QgsSymbolList
Definition qgsrenderer.h:47