Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsrasterminmaxorigin.h - Origin of min/max values 3 : : -------------------------------------- 4 : : Date : Dec 2016 5 : : Copyright : (C) 2016 by Even Rouault 6 : : email : even.rouault at spatialys.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 QGSRASTERMINMAXORIGIN_H 19 : : #define QGSRASTERMINMAXORIGIN_H 20 : : 21 : : #include <QDomDocument> 22 : : #include "qgis_sip.h" 23 : : #include <QDomElement> 24 : : 25 : : #include "qgis_core.h" 26 : : 27 : : /** 28 : : * \ingroup core 29 : : * \brief This class describes the origin of min/max values. It does not store by 30 : : * itself the min/max values. 31 : : * \since QGIS 3.0 32 : : */ 33 : : class CORE_EXPORT QgsRasterMinMaxOrigin 34 : : { 35 : : 36 : : public: 37 : : 38 : : //! \brief Default cumulative cut lower limit 39 : : static constexpr double CUMULATIVE_CUT_LOWER = 0.02; 40 : : 41 : : //! \brief Default cumulative cut upper limit 42 : : static constexpr double CUMULATIVE_CUT_UPPER = 0.98; 43 : : 44 : : //! \brief Default standard deviation factor 45 : : static constexpr double DEFAULT_STDDEV_FACTOR = 2.0; 46 : : 47 : : #ifdef SIP_RUN 48 : : //! \brief This enumerator describes the limits used to compute min/max values 49 : : enum Limits 50 : : { 51 : : None SIP_PYNAME( None_ ), //!< User defined. 52 : : MinMax, //!< Real min-max values 53 : : StdDev, //!< Range is [ mean - stdDevFactor() * stddev, mean + stdDevFactor() * stddev ] 54 : : CumulativeCut //!< Range is [ min + cumulativeCutLower() * (max - min), min + cumulativeCutUpper() * (max - min) ] 55 : : }; 56 : : #else 57 : : //! \brief This enumerator describes the limits used to compute min/max values 58 : : enum Limits 59 : : { 60 : : None, //!< User defined. 61 : : MinMax, //!< Real min-max values 62 : : StdDev, //!< Range is [ mean - stdDevFactor() * stddev, mean + stdDevFactor() * stddev ] 63 : : CumulativeCut //!< Range is [ min + cumulativeCutLower() * (max - min), min + cumulativeCutUpper() * (max - min) ] 64 : : }; 65 : : #endif 66 : : 67 : : //! \brief This enumerator describes the extent used to compute min/max values 68 : : enum Extent 69 : : { 70 : : //! Whole raster is used to compute statistics. 71 : : WholeRaster, 72 : : //! Current extent of the canvas (at the time of computation) is used to compute statistics. 73 : : CurrentCanvas, 74 : : //! Constantly updated extent of the canvas is used to compute statistics. 75 : : UpdatedCanvas 76 : : }; 77 : : 78 : : //! \brief This enumerator describes the accuracy used to compute statistics. 79 : : enum StatAccuracy 80 : : { 81 : : //! Exact statistics. 82 : : Exact, 83 : : //! Approximated statistics. 84 : : Estimated 85 : : }; 86 : : 87 : : //! \brief Default constructor. 88 : : QgsRasterMinMaxOrigin(); 89 : : 90 : : //! \brief Equality operator. 91 : : bool operator ==( const QgsRasterMinMaxOrigin &other ) const; 92 : : 93 : : //////// Getter methods ///////////////////// 94 : : 95 : : //! Returns the raster limits. 96 : 0 : QgsRasterMinMaxOrigin::Limits limits() const { return mLimits; } 97 : : 98 : : //! Returns the raster extent. 99 : 0 : QgsRasterMinMaxOrigin::Extent extent() const { return mExtent; } 100 : : 101 : : //! Returns the raster statistic accuracy. 102 : : QgsRasterMinMaxOrigin::StatAccuracy statAccuracy() const { return mAccuracy; } 103 : : 104 : : //! Returns the lower bound of cumulative cut method (between 0 and 1). 105 : 0 : double cumulativeCutLower() const { return mCumulativeCutLower; } 106 : : 107 : : //! Returns the upper bound of cumulative cut method (between 0 and 1). 108 : 0 : double cumulativeCutUpper() const { return mCumulativeCutUpper; } 109 : : 110 : : //! Returns the factor f so that the min/max range is [ mean - f * stddev , mean + f * stddev ] 111 : 0 : double stdDevFactor() const { return mStdDevFactor; } 112 : : 113 : : //////// Setter methods ///////////////////// 114 : : 115 : : //! Sets the limits. 116 : 0 : void setLimits( QgsRasterMinMaxOrigin::Limits limits ) { mLimits = limits; } 117 : : 118 : : //! Sets the extent. 119 : 0 : void setExtent( QgsRasterMinMaxOrigin::Extent extent ) { mExtent = extent; } 120 : : 121 : : //! Sets the statistics accuracy. 122 : 0 : void setStatAccuracy( QgsRasterMinMaxOrigin::StatAccuracy accuracy ) { mAccuracy = accuracy; } 123 : : 124 : : //! Sets the lower bound of cumulative cut method (between 0 and 1). 125 : : void setCumulativeCutLower( double val ) { mCumulativeCutLower = val; } 126 : : 127 : : //! Sets the upper bound of cumulative cut method (between 0 and 1). 128 : : void setCumulativeCutUpper( double val ) { mCumulativeCutUpper = val; } 129 : : 130 : : //! Sets the factor f so that the min/max range is [ mean - f * stddev , mean + f * stddev ] 131 : : void setStdDevFactor( double val ) { mStdDevFactor = val; } 132 : : 133 : : //////// XML serialization ///////////////////// 134 : : 135 : : //! \brief Serialize object. 136 : : void writeXml( QDomDocument &doc, QDomElement &parentElem ) const; 137 : : 138 : : //! \brief Deserialize object. 139 : : void readXml( const QDomElement &elem ); 140 : : 141 : : //////// Static methods ///////////////////// 142 : : 143 : : //! Returns a string to serialize Limits 144 : : static QString limitsString( Limits limits ); 145 : : 146 : : //! \brief Deserialize Limits 147 : : static Limits limitsFromString( const QString &limits ); 148 : : 149 : : //! Returns a string to serialize Extent 150 : : static QString extentString( QgsRasterMinMaxOrigin::Extent extent ); 151 : : 152 : : //! \brief Deserialize Extent 153 : : static QgsRasterMinMaxOrigin::Extent extentFromString( const QString &extent ); 154 : : 155 : : //! Returns a string to serialize StatAccuracy 156 : : static QString statAccuracyString( QgsRasterMinMaxOrigin::StatAccuracy accuracy ); 157 : : 158 : : //! \brief Deserialize StatAccuracy 159 : : static QgsRasterMinMaxOrigin::StatAccuracy statAccuracyFromString( const QString &accuracy ); 160 : : 161 : : private: 162 : : 163 : : Limits mLimits = None; 164 : : Extent mExtent = WholeRaster; 165 : : StatAccuracy mAccuracy = Estimated; 166 : : double mCumulativeCutLower; 167 : : double mCumulativeCutUpper; 168 : : double mStdDevFactor; 169 : : }; 170 : : 171 : : #endif // QGSRASTERMINMAXORIGIN_H