1 /***************************************************************************
2                          qgsalgorithmlinedensity.h
3                          ---------------------
4     begin                : December 2019
5     copyright            : (C) 2019 by Clemens Raffler
6     email                : clemens dot raffler at gmail dot com
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 QGSALGORITHMLINEDENSITY_H
19 #define QGSALGORITHMLINEDENSITY_H
20 
21 #define SIP_NO_FILE
22 
23 #include "qgis_sip.h"
24 #include "qgsprocessingalgorithm.h"
25 #include "qgsapplication.h"
26 
27 ///@cond PRIVATE
28 
29 /**
30  * Line Density Algorithm as implemented in ESRI ArcGIS Spatial Analyst
31  *
32  * Literature:
33  * Silverman, B.w. Density Estimation for Statistics and Data Analsis.
34  * New York: Chapman and Hall, 1986
35  *
36  */
37 class QgsLineDensityAlgorithm : public QgsProcessingAlgorithm
38 {
39   public:
40 
41     QgsLineDensityAlgorithm() = default;
42     void initAlgorithm( const QVariantMap &configuration = QVariantMap() ) override;
icon()43     QIcon icon() const override { return QgsApplication::getThemeIcon( QStringLiteral( "/algorithms/mAlgorithmLineDensity.svg" ) ); }
svgIconPath()44     QString svgIconPath() const override { return QgsApplication::iconPath( QStringLiteral( "/algorithms/mAlgorithmLineDensity.svg" ) ); }
45     QString name() const override;
46     QString displayName() const override;
47     QStringList tags() const override;
48     QString group() const override;
49     QString groupId() const override;
50     QString shortHelpString() const override;
51     QgsLineDensityAlgorithm *createInstance() const override SIP_FACTORY;
52 
53   protected:
54     bool prepareAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
55     QVariantMap processAlgorithm( const QVariantMap &parameters,
56                                   QgsProcessingContext &context,
57                                   QgsProcessingFeedback *feedback ) override;
58 
59   private:
60     std::unique_ptr< QgsFeatureSource > mSource;
61     QString mWeightField;
62     double mSearchRadius;
63     double mPixelSize;
64     QgsGeometry mSearchGeometry;
65     QgsRectangle mExtent;
66     QgsCoordinateReferenceSystem mCrs;
67     QgsDistanceArea mDa;
68     QgsSpatialIndex mIndex;
69     QHash<QgsFeatureId, double> mFeatureWeights;
70 
71 };
72 
73 ///@endcond PRIVATE
74 
75 #endif // QGSALGORITHMLINEDENSITY_H
76