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 ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override; 56 QVariantMap processAlgorithm( const QVariantMap ¶meters, 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