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