Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsalgorithmcellstatistics.h 3 : : --------------------- 4 : : begin : May 2020 5 : : copyright : (C) 2020 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 QGSALGORITHMCELLSTATISTICS_H 19 : : #define QGSALGORITHMCELLSTATISTICS_H 20 : : 21 : : #define SIP_NO_FILE 22 : : 23 : : #include "qgis_sip.h" 24 : : #include "qgsapplication.h" 25 : : #include "qgsprocessingalgorithm.h" 26 : : #include "qgsrasterprojector.h" 27 : : #include "qgsrasteranalysisutils.h" 28 : : 29 : : ///@cond PRIVATE 30 : : 31 : 0 : class QgsCellStatisticsAlgorithmBase : public QgsProcessingAlgorithm 32 : : { 33 : : 34 : : public: 35 : : QString group() const final; 36 : : QString groupId() const final; 37 : : void initAlgorithm( const QVariantMap &configuration = QVariantMap() ) final; 38 : : 39 : : 40 : : protected: 41 : : virtual void addSpecificAlgorithmParams() = 0; 42 : : virtual bool prepareSpecificAlgorithmParameters( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) = 0; 43 : : bool prepareAlgorithm( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) final; 44 : : QVariantMap processAlgorithm( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) final; 45 : : virtual void processRasterStack( QgsProcessingFeedback *feedback ) = 0; 46 : : 47 : : std::vector< QgsRasterAnalysisUtils::RasterLogicInput > mInputs; 48 : : bool mIgnoreNoData; 49 : : Qgis::DataType mDataType; 50 : 0 : double mNoDataValue = -9999; 51 : : int mLayerWidth; 52 : : int mLayerHeight; 53 : : QgsRectangle mExtent; 54 : : QgsCoordinateReferenceSystem mCrs; 55 : : double mRasterUnitsPerPixelX; 56 : : double mRasterUnitsPerPixelY; 57 : : QgsRasterDataProvider *mOutputRasterDataProvider; 58 : : }; 59 : : 60 : 0 : class QgsCellStatisticsAlgorithm : public QgsCellStatisticsAlgorithmBase 61 : : { 62 : : public: 63 : 0 : QgsCellStatisticsAlgorithm() = default; 64 : 0 : QIcon icon() const override { return QgsApplication::getThemeIcon( QStringLiteral( "/algorithms/mAlgorithmCellStatistics.svg" ) ); } 65 : 0 : QString svgIconPath() const override { return QgsApplication::iconPath( QStringLiteral( "/algorithms/mAlgorithmCellStatistics.svg" ) ); } 66 : : QString name() const override; 67 : : QString displayName() const override; 68 : : QStringList tags() const override; 69 : : QString shortHelpString() const override; 70 : : QgsCellStatisticsAlgorithm *createInstance() const override SIP_FACTORY; 71 : : 72 : : protected: 73 : : void addSpecificAlgorithmParams() override; 74 : : bool prepareSpecificAlgorithmParameters( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override; 75 : : void processRasterStack( QgsProcessingFeedback *feedback ) override; 76 : : 77 : : private: 78 : : QgsRasterAnalysisUtils::CellValueStatisticMethods mMethod; 79 : : 80 : : }; 81 : : 82 : : 83 : 0 : class QgsCellStatisticsPercentileAlgorithm : public QgsCellStatisticsAlgorithmBase 84 : : { 85 : : public: 86 : 0 : QgsCellStatisticsPercentileAlgorithm() = default; 87 : 0 : QIcon icon() const override { return QgsApplication::getThemeIcon( QStringLiteral( "/algorithms/mAlgorithmCellStatisticsPercentile.svg" ) ); } 88 : 0 : QString svgIconPath() const override { return QgsApplication::iconPath( QStringLiteral( "/algorithms/mAlgorithmCellStatisticsPercentile.svg" ) ); } 89 : : QString name() const override; 90 : : QString displayName() const override; 91 : : QStringList tags() const override; 92 : : QString shortHelpString() const override; 93 : : QgsCellStatisticsPercentileAlgorithm *createInstance() const override SIP_FACTORY; 94 : : 95 : : protected: 96 : : void addSpecificAlgorithmParams() override; 97 : : bool prepareSpecificAlgorithmParameters( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override; 98 : : void processRasterStack( QgsProcessingFeedback *feedback ) override; 99 : : 100 : : private: 101 : : QgsRasterAnalysisUtils::CellValuePercentileMethods mMethod; 102 : 0 : double mPercentile = 0.0; 103 : : }; 104 : : 105 : : 106 : 0 : class QgsCellStatisticsPercentRankFromValueAlgorithm : public QgsCellStatisticsAlgorithmBase 107 : : { 108 : : public: 109 : 0 : QgsCellStatisticsPercentRankFromValueAlgorithm() = default; 110 : 0 : QIcon icon() const override { return QgsApplication::getThemeIcon( QStringLiteral( "/algorithms/mAlgorithmCellStatisticsPercentRank.svg" ) ); } 111 : 0 : QString svgIconPath() const override { return QgsApplication::iconPath( QStringLiteral( "/algorithms/mAlgorithmCellStatisticsPercentRank.svg" ) ); } 112 : : QString name() const override; 113 : : QString displayName() const override; 114 : : QStringList tags() const override; 115 : : QString shortHelpString() const override; 116 : : QgsCellStatisticsPercentRankFromValueAlgorithm *createInstance() const override SIP_FACTORY; 117 : : 118 : : protected: 119 : : void addSpecificAlgorithmParams() override; 120 : : bool prepareSpecificAlgorithmParameters( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override; 121 : : void processRasterStack( QgsProcessingFeedback *feedback ) override; 122 : : 123 : : private: 124 : : QgsRasterAnalysisUtils::CellValuePercentRankMethods mMethod; 125 : 0 : double mValue = 0.0; 126 : : 127 : : }; 128 : : 129 : : 130 : 0 : class QgsCellStatisticsPercentRankFromRasterAlgorithm : public QgsCellStatisticsAlgorithmBase 131 : : { 132 : : public: 133 : 0 : QgsCellStatisticsPercentRankFromRasterAlgorithm() = default; 134 : 0 : QIcon icon() const override { return QgsApplication::getThemeIcon( QStringLiteral( "/algorithms/mAlgorithmCellStatisticsPercentRank.svg" ) ); } 135 : 0 : QString svgIconPath() const override { return QgsApplication::iconPath( QStringLiteral( "/algorithms/mAlgorithmCellStatisticsPercentRank.svg" ) ); } 136 : : QString name() const override; 137 : : QString displayName() const override; 138 : : QStringList tags() const override; 139 : : QString shortHelpString() const override; 140 : : QgsCellStatisticsPercentRankFromRasterAlgorithm *createInstance() const override SIP_FACTORY; 141 : : 142 : : protected: 143 : : void addSpecificAlgorithmParams() override; 144 : : bool prepareSpecificAlgorithmParameters( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override; 145 : : void processRasterStack( QgsProcessingFeedback *feedback ) override; 146 : : 147 : : private: 148 : : QgsRasterAnalysisUtils::CellValuePercentRankMethods mMethod; 149 : : std::unique_ptr< QgsRasterInterface > mValueRasterInterface; 150 : : int mValueRasterBand; 151 : : 152 : : }; 153 : : 154 : : 155 : : ///@endcond PRIVATE 156 : : 157 : : #endif // QGSALGORITHMCELLSTATISTICS_H 158 : :