Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsalgorithmrasterlayeruniquevalues.h 3 : : --------------------- 4 : : begin : October 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 QGSFUZZIFYRASTERALGORITHM_H 19 : : #define QGSFUZZIFYRASTERALGORITHM_H 20 : : 21 : : #define SIP_NO_FILE 22 : : 23 : : #include "qgis_sip.h" 24 : : #include "qgsprocessingalgorithm.h" 25 : : #include "qgsapplication.h" 26 : : 27 : : ///@cond PRIVATE 28 : : 29 : : /** 30 : : * Base class for raster fuzzification algorithms. 31 : : */ 32 : 0 : class QgsFuzzifyRasterAlgorithmBase : public QgsProcessingAlgorithm 33 : : { 34 : : public: 35 : : QString group() const final; 36 : : QString groupId() const final; 37 : : void initAlgorithm( const QVariantMap &configuration = QVariantMap() ) final; 38 : : 39 : : protected: 40 : : 41 : : /** 42 : : * Adds specific subclass algorithm parameters. The common parameters, such as raster destination, are automatically 43 : : * added by the base class. 44 : : */ 45 : : virtual void addAlgorithmParams() = 0; 46 : : 47 : : bool prepareAlgorithm( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) final; 48 : : 49 : : /** 50 : : * Prepares the fuzzfication algorithm subclass for execution. 51 : : */ 52 : : virtual bool prepareAlgorithmFuzzificationParameters( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) = 0; 53 : : 54 : : /** 55 : : * Processes a raster using fuzzify() method which is implemented in subclasses providing different fuzzy membership types. 56 : : */ 57 : : QVariantMap processAlgorithm( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) final; 58 : : 59 : : /** 60 : : * Pure virtual method fuzzify() performs subclass specific fuzzification. 61 : : */ 62 : : virtual void fuzzify( QgsProcessingFeedback *feedback ) = 0; 63 : : 64 : : QgsRasterLayer *mInputRaster; 65 : : int mBand; 66 : : std::unique_ptr< QgsRasterInterface > mInterface; 67 : : QgsRectangle mExtent; 68 : : QgsCoordinateReferenceSystem mCrs; 69 : : int mLayerWidth; 70 : : int mLayerHeight; 71 : 0 : int mNbCellsXProvider = 0; 72 : 0 : int mNbCellsYProvider = 0; 73 : : 74 : 0 : Qgis::DataType mDataType = Qgis::Float32; 75 : 0 : const double mNoDataValue = -9999; 76 : : QgsRasterDataProvider *mDestinationRasterProvider; 77 : : }; 78 : : 79 : : 80 : : 81 : : 82 : 0 : class QgsFuzzifyRasterLinearMembershipAlgorithm : public QgsFuzzifyRasterAlgorithmBase 83 : : { 84 : : 85 : : public: 86 : 0 : QgsFuzzifyRasterLinearMembershipAlgorithm() = default; 87 : 0 : QIcon icon() const override { return QgsApplication::getThemeIcon( QStringLiteral( "/algorithms/mAlgorithmFuzzifyLinear.svg" ) ); } 88 : 0 : QString svgIconPath() const override { return QgsApplication::iconPath( QStringLiteral( "/algorithms/mAlgorithmFuzzifyLinear.svg" ) ); } 89 : : QString name() const override; 90 : : QString displayName() const override; 91 : : QStringList tags() const override; 92 : : QString shortHelpString() const override; 93 : : QgsFuzzifyRasterLinearMembershipAlgorithm *createInstance() const override SIP_FACTORY; 94 : : 95 : : protected: 96 : : void addAlgorithmParams() override; 97 : : bool prepareAlgorithmFuzzificationParameters( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override; 98 : : void fuzzify( QgsProcessingFeedback *feedback ) override; 99 : : 100 : : private: 101 : : double mFuzzifyLowBound; 102 : : double mFuzzifyHighBound; 103 : : 104 : : }; 105 : : 106 : : 107 : 0 : class QgsFuzzifyRasterPowerMembershipAlgorithm : public QgsFuzzifyRasterAlgorithmBase 108 : : { 109 : : 110 : : public: 111 : 0 : QgsFuzzifyRasterPowerMembershipAlgorithm() = default; 112 : 0 : QIcon icon() const override { return QgsApplication::getThemeIcon( QStringLiteral( "/algorithms/mAlgorithmFuzzifyPower.svg" ) ); } 113 : 0 : QString svgIconPath() const override { return QgsApplication::iconPath( QStringLiteral( "/algorithms/mAlgorithmFuzzifyPower.svg" ) ); } 114 : : QString name() const override; 115 : : QString displayName() const override; 116 : : QStringList tags() const override; 117 : : QString shortHelpString() const override; 118 : : QgsFuzzifyRasterPowerMembershipAlgorithm *createInstance() const override SIP_FACTORY; 119 : : 120 : : protected: 121 : : void addAlgorithmParams() override; 122 : : bool prepareAlgorithmFuzzificationParameters( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override; 123 : : void fuzzify( QgsProcessingFeedback *feedback ) override; 124 : : 125 : : private: 126 : : double mFuzzifyLowBound; 127 : : double mFuzzifyHighBound; 128 : : double mFuzzifyExponent; 129 : : 130 : : }; 131 : : 132 : : 133 : 0 : class QgsFuzzifyRasterLargeMembershipAlgorithm : public QgsFuzzifyRasterAlgorithmBase 134 : : { 135 : : 136 : : public: 137 : 0 : QgsFuzzifyRasterLargeMembershipAlgorithm() = default; 138 : 0 : QIcon icon() const override { return QgsApplication::getThemeIcon( QStringLiteral( "/algorithms/mAlgorithmFuzzifyLarge.svg" ) ); } 139 : 0 : QString svgIconPath() const override { return QgsApplication::iconPath( QStringLiteral( "/algorithms/mAlgorithmFuzzifyLarge.svg" ) ); } 140 : : QString name() const override; 141 : : QString displayName() const override; 142 : : QStringList tags() const override; 143 : : QString shortHelpString() const override; 144 : : QgsFuzzifyRasterLargeMembershipAlgorithm *createInstance() const override SIP_FACTORY; 145 : : 146 : : protected: 147 : : void addAlgorithmParams() override; 148 : : bool prepareAlgorithmFuzzificationParameters( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override; 149 : : void fuzzify( QgsProcessingFeedback *feedback ) override; 150 : : 151 : : private: 152 : : double mFuzzifyMidpoint; 153 : : double mFuzzifySpread; 154 : : 155 : : }; 156 : : 157 : : 158 : 0 : class QgsFuzzifyRasterSmallMembershipAlgorithm : public QgsFuzzifyRasterAlgorithmBase 159 : : { 160 : : 161 : : public: 162 : 0 : QgsFuzzifyRasterSmallMembershipAlgorithm() = default; 163 : 0 : QIcon icon() const override { return QgsApplication::getThemeIcon( QStringLiteral( "/algorithms/mAlgorithmFuzzifySmall.svg" ) ); } 164 : 0 : QString svgIconPath() const override { return QgsApplication::iconPath( QStringLiteral( "/algorithms/mAlgorithmFuzzifySmall.svg" ) ); } 165 : : QString name() const override; 166 : : QString displayName() const override; 167 : : QStringList tags() const override; 168 : : QString shortHelpString() const override; 169 : : QgsFuzzifyRasterSmallMembershipAlgorithm *createInstance() const override SIP_FACTORY; 170 : : 171 : : protected: 172 : : void addAlgorithmParams() override; 173 : : bool prepareAlgorithmFuzzificationParameters( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override; 174 : : void fuzzify( QgsProcessingFeedback *feedback ) override; 175 : : 176 : : private: 177 : : double mFuzzifyMidpoint; 178 : : double mFuzzifySpread; 179 : : 180 : : }; 181 : : 182 : : 183 : 0 : class QgsFuzzifyRasterGaussianMembershipAlgorithm : public QgsFuzzifyRasterAlgorithmBase 184 : : { 185 : : 186 : : public: 187 : 0 : QgsFuzzifyRasterGaussianMembershipAlgorithm() = default; 188 : 0 : QIcon icon() const override { return QgsApplication::getThemeIcon( QStringLiteral( "/algorithms/mAlgorithmFuzzifyGaussian.svg" ) ); } 189 : 0 : QString svgIconPath() const override { return QgsApplication::iconPath( QStringLiteral( "/algorithms/mAlgorithmFuzzifyGaussian.svg" ) ); } 190 : : QString name() const override; 191 : : QString displayName() const override; 192 : : QStringList tags() const override; 193 : : QString shortHelpString() const override; 194 : : QgsFuzzifyRasterGaussianMembershipAlgorithm *createInstance() const override SIP_FACTORY; 195 : : 196 : : protected: 197 : : void addAlgorithmParams() override; 198 : : bool prepareAlgorithmFuzzificationParameters( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override; 199 : : void fuzzify( QgsProcessingFeedback *feedback ) override; 200 : : 201 : : private: 202 : : double mFuzzifyMidpoint; 203 : : double mFuzzifySpread; 204 : : 205 : : }; 206 : : 207 : : 208 : 0 : class QgsFuzzifyRasterNearMembershipAlgorithm : public QgsFuzzifyRasterAlgorithmBase 209 : : { 210 : : 211 : : public: 212 : 0 : QgsFuzzifyRasterNearMembershipAlgorithm() = default; 213 : 0 : QIcon icon() const override { return QgsApplication::getThemeIcon( QStringLiteral( "/algorithms/mAlgorithmFuzzifyNear.svg" ) ); } 214 : 0 : QString svgIconPath() const override { return QgsApplication::iconPath( QStringLiteral( "/algorithms/mAlgorithmFuzzifyNear.svg" ) ); } 215 : : QString name() const override; 216 : : QString displayName() const override; 217 : : QStringList tags() const override; 218 : : QString shortHelpString() const override; 219 : : QgsFuzzifyRasterNearMembershipAlgorithm *createInstance() const override SIP_FACTORY; 220 : : 221 : : protected: 222 : : void addAlgorithmParams() override; 223 : : bool prepareAlgorithmFuzzificationParameters( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override; 224 : : void fuzzify( QgsProcessingFeedback *feedback ) override; 225 : : 226 : : private: 227 : : double mFuzzifyMidpoint; 228 : : double mFuzzifySpread; 229 : : 230 : : }; 231 : : 232 : : 233 : : ///@endcond PRIVATE 234 : : 235 : : #endif // QGSALGORITHMFUZZIFYRASTER_H 236 : : 237 : :