/usr/include/qgis/qgsheatmaprenderer.h is in libqgis-dev 2.8.6+dfsg-1build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 | /***************************************************************************
qgsheatmaprenderer.h
---------------------
begin : November 2014
copyright : (C) 2014 Nyall Dawson
email : nyall dot dawson at gmail dot com
***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef QGSHEATMAPRENDERER_H
#define QGSHEATMAPRENDERER_H
#include "qgis.h"
#include "qgsrendererv2.h"
#include "qgssymbolv2.h"
#include "qgsexpression.h"
#include "qgsfeature.h"
#include "qgsgeometry.h"
#include <QScopedPointer>
class QgsVectorColorRampV2;
/** \ingroup core
* \class QgsHeatmapRenderer
* \brief A renderer which draws points as a live heatmap
* \note Added in version 2.7
*/
class CORE_EXPORT QgsHeatmapRenderer : public QgsFeatureRendererV2
{
public:
QgsHeatmapRenderer();
virtual ~QgsHeatmapRenderer();
//reimplemented methods
virtual QgsFeatureRendererV2* clone() const override;
virtual void startRender( QgsRenderContext& context, const QgsFields& fields ) override;
virtual bool renderFeature( QgsFeature& feature, QgsRenderContext& context, int layer = -1, bool selected = false, bool drawVertexMarker = false ) override;
virtual void stopRender( QgsRenderContext& context ) override;
virtual QgsSymbolV2* symbolForFeature( QgsFeature& feature ) override;
virtual QgsSymbolV2List symbols() override;
virtual QString dump() const override;
virtual QList<QString> usedAttributes() override;
static QgsFeatureRendererV2* create( QDomElement& element );
virtual QDomElement save( QDomDocument& doc ) override;
static QgsHeatmapRenderer* convertFromRenderer( const QgsFeatureRendererV2* renderer );
//reimplemented to extent the request so that points up to heatmap's radius distance outside
//visible area are included
virtual void modifyRequestExtent( QgsRectangle& extent, QgsRenderContext& context ) override;
//heatmap specific methods
/**Returns the color ramp used for shading the heatmap.
* @returns color ramp for heatmap
* @see setColorRamp
*/
QgsVectorColorRampV2* colorRamp() const { return mGradientRamp; }
/**Sets the color ramp to use for shading the heatmap.
* @param ramp color ramp for heatmap. Ownership of ramp is transferred to the renderer.
* @see colorRamp
*/
void setColorRamp( QgsVectorColorRampV2* ramp );
/**Returns whether the ramp is inverted
* @returns true if color ramp is inverted
* @see setInvertRamp
* @see colorRamp
*/
double invertRamp() const { return mInvertRamp; }
/**Sets whether the ramp is inverted
* @param invert set to true to invert color ramp
* @see invertRamp
* @see setColorRamp
*/
void setInvertRamp( const bool invert ) { mInvertRamp = invert; }
/**Returns the radius for the heatmap
* @returns heatmap radius
* @see setRadius
* @see radiusUnit
* @see radiusMapUnitScale
*/
double radius() const { return mRadius; }
/**Sets the radius for the heatmap
* @param radius heatmap radius
* @see radius
* @see setRadiusUnit
* @see setRadiusMapUnitScale
*/
void setRadius( const double radius ) { mRadius = radius; }
/**Returns the units used for the heatmap's radius
* @returns units for heatmap radius
* @see radius
* @see setRadiusUnit
* @see radiusMapUnitScale
*/
QgsSymbolV2::OutputUnit radiusUnit() const { return mRadiusUnit; }
/**Sets the units used for the heatmap's radius
* @param unit units for heatmap radius
* @see radiusUnit
* @see setRadius
* @see radiusMapUnitScale
*/
void setRadiusUnit( const QgsSymbolV2::OutputUnit unit ) { mRadiusUnit = unit; }
/**Returns the map unit scale used for the heatmap's radius
* @returns map unit scale for heatmap's radius
* @see radius
* @see radiusUnit
* @see setRadiusMapUnitScale
*/
const QgsMapUnitScale& radiusMapUnitScale() const { return mRadiusMapUnitScale; }
/**Sets the map unit scale used for the heatmap's radius
* @param scale map unit scale for heatmap's radius
* @see setRadius
* @see setRadiusUnit
* @see radiusMapUnitScale
*/
void setRadiusMapUnitScale( const QgsMapUnitScale& scale ) { mRadiusMapUnitScale = scale; }
/**Returns the maximum value used for shading the heatmap.
* @returns maximum value for heatmap shading. If 0, then maximum value will be automatically
* calculated.
* @see setMaximumValue
*/
double maximumValue() const { return mExplicitMax; }
/**Sets the maximum value used for shading the heatmap.
* @param value maximum value for heatmap shading. Set to 0 for automatic calculation of
* maximum value.
* @see maximumValue
*/
void setMaximumValue( const double value ) { mExplicitMax = value; }
/**Returns the render quality used for drawing the heatmap.
* @returns render quality. A value of 1 indicates maximum quality, and increasing the
* value will result in faster drawing but lower quality rendering.
* @see setRenderQuality
*/
double renderQuality() const { return mRenderQuality; }
/**Sets the render quality used for drawing the heatmap.
* @param quality render quality. A value of 1 indicates maximum quality, and increasing the
* value will result in faster drawing but lower quality rendering.
* @see renderQuality
*/
void setRenderQuality( const int quality ) { mRenderQuality = quality; }
/**Returns the expression used for weighting points when generating the heatmap.
* @returns point weight expression. If empty, all points are equally weighted.
* @see setWeightExpression
*/
QString weightExpression() const { return mWeightExpressionString; }
/**Sets the expression used for weighting points when generating the heatmap.
* @param expression point weight expression. If set to empty, all points are equally weighted.
* @see weightExpression
*/
void setWeightExpression( const QString& expression ) { mWeightExpressionString = expression; }
private:
/** Private copy constructor. @see clone() */
QgsHeatmapRenderer( const QgsHeatmapRenderer& );
/** Private assignment operator. @see clone() */
QgsHeatmapRenderer& operator=( const QgsHeatmapRenderer& );
QVector<double> mValues;
double mCalculatedMaxValue;
double mRadius;
int mRadiusPixels;
double mRadiusSquared;
QgsSymbolV2::OutputUnit mRadiusUnit;
QgsMapUnitScale mRadiusMapUnitScale;
QString mWeightExpressionString;
int mWeightAttrNum;
QScopedPointer<QgsExpression> mWeightExpression;
QgsVectorColorRampV2* mGradientRamp;
bool mInvertRamp;
double mExplicitMax;
int mRenderQuality;
int mFeaturesRendered;
double uniformKernel( const double distance, const int bandwidth ) const;
double quarticKernel( const double distance, const int bandwidth ) const;
double triweightKernel( const double distance, const int bandwidth ) const;
double epanechnikovKernel( const double distance, const int bandwidth ) const;
double triangularKernel( const double distance, const int bandwidth ) const;
QgsMultiPoint convertToMultipoint( QgsGeometry *geom );
void initializeValues( QgsRenderContext& context );
void renderImage( QgsRenderContext &context );
};
#endif // QGSHEATMAPRENDERER_H
|