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 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 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 class QgsCellStatisticsAlgorithm : public QgsCellStatisticsAlgorithmBase 61 { 62 public: 63 QgsCellStatisticsAlgorithm() = default; icon()64 QIcon icon() const override { return QgsApplication::getThemeIcon( QStringLiteral( "/algorithms/mAlgorithmCellStatistics.svg" ) ); } svgIconPath()65 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 class QgsCellStatisticsPercentileAlgorithm : public QgsCellStatisticsAlgorithmBase 84 { 85 public: 86 QgsCellStatisticsPercentileAlgorithm() = default; icon()87 QIcon icon() const override { return QgsApplication::getThemeIcon( QStringLiteral( "/algorithms/mAlgorithmCellStatisticsPercentile.svg" ) ); } svgIconPath()88 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 double mPercentile = 0.0; 103 }; 104 105 106 class QgsCellStatisticsPercentRankFromValueAlgorithm : public QgsCellStatisticsAlgorithmBase 107 { 108 public: 109 QgsCellStatisticsPercentRankFromValueAlgorithm() = default; icon()110 QIcon icon() const override { return QgsApplication::getThemeIcon( QStringLiteral( "/algorithms/mAlgorithmCellStatisticsPercentRank.svg" ) ); } svgIconPath()111 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 double mValue = 0.0; 126 127 }; 128 129 130 class QgsCellStatisticsPercentRankFromRasterAlgorithm : public QgsCellStatisticsAlgorithmBase 131 { 132 public: 133 QgsCellStatisticsPercentRankFromRasterAlgorithm() = default; icon()134 QIcon icon() const override { return QgsApplication::getThemeIcon( QStringLiteral( "/algorithms/mAlgorithmCellStatisticsPercentRank.svg" ) ); } svgIconPath()135 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 159