1 /*************************************************************************** 2 qgsalgorithmrasterfrequencybycomparisonoperator.h 3 --------------------- 4 begin : June 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 QGSALGORITHMRASTERFREQUENCYBYCOMPARISON_H 19 #define QGSALGORITHMRASTERFREQUENCYBYCOMPARISON_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 QgsRasterFrequencyByComparisonOperatorBase : public QgsProcessingAlgorithm 32 { 33 public: 34 QgsRasterFrequencyByComparisonOperatorBase() = default; 35 void initAlgorithm( const QVariantMap &configuration = QVariantMap() ) override; 36 QString group() const override; 37 QString groupId() const override; 38 39 protected: 40 bool prepareAlgorithm( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override; 41 QVariantMap processAlgorithm( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override; 42 virtual int applyComparisonOperator( double value, std::vector<double>cellValueStack ) = 0; 43 44 private: 45 std::unique_ptr< QgsRasterInterface > mInputValueRasterInterface; 46 int mInputValueRasterBand; 47 std::vector< QgsRasterAnalysisUtils::RasterLogicInput > mInputs; 48 bool mIgnoreNoData; 49 double mNoDataValue = -9999; 50 int mLayerWidth; 51 int mLayerHeight; 52 QgsRectangle mExtent; 53 QgsCoordinateReferenceSystem mCrs; 54 double mRasterUnitsPerPixelX; 55 double mRasterUnitsPerPixelY; 56 }; 57 58 class QgsRasterFrequencyByEqualOperatorAlgorithm : public QgsRasterFrequencyByComparisonOperatorBase 59 { 60 public: 61 QgsRasterFrequencyByEqualOperatorAlgorithm() = default; 62 QString name() const override; 63 QString displayName() const override; 64 QStringList tags() const override; 65 QString shortHelpString() const override; 66 QgsRasterFrequencyByEqualOperatorAlgorithm *createInstance() const override SIP_FACTORY; 67 68 protected: 69 int applyComparisonOperator( double searchValue, std::vector<double>cellValueStack ) override; 70 }; 71 72 class QgsRasterFrequencyByGreaterThanOperatorAlgorithm : public QgsRasterFrequencyByComparisonOperatorBase 73 { 74 public: 75 QgsRasterFrequencyByGreaterThanOperatorAlgorithm() = default; 76 QString name() const override; 77 QString displayName() const override; 78 QStringList tags() const override; 79 QString shortHelpString() const override; 80 QgsRasterFrequencyByGreaterThanOperatorAlgorithm *createInstance() const override SIP_FACTORY; 81 82 protected: 83 int applyComparisonOperator( double value, std::vector<double>cellValueStack ) override; 84 }; 85 86 class QgsRasterFrequencyByLessThanOperatorAlgorithm : public QgsRasterFrequencyByComparisonOperatorBase 87 { 88 public: 89 QgsRasterFrequencyByLessThanOperatorAlgorithm() = default; 90 QString name() const override; 91 QString displayName() const override; 92 QStringList tags() const override; 93 QString shortHelpString() const override; 94 QgsRasterFrequencyByLessThanOperatorAlgorithm *createInstance() const override SIP_FACTORY; 95 96 protected: 97 int applyComparisonOperator( double value, std::vector<double>cellValueStack ) override; 98 }; 99 100 ///@endcond PRIVATE 101 102 #endif // QGSALGORITHMRASTERFREQUENCYBYCOMPARISON_H 103 104