26#include <QDomDocument>
30using namespace Qt::StringLiterals;
33 u
"cumulative-cut-lower"_s,
36 u
"Default lower cumulative cut value (a fraction between 0 and 1) used when computing raster min/max values via the cumulative count cut method."_s,
42 u
"cumulative-cut-upper"_s,
45 u
"Default upper cumulative cut value (a fraction between 0 and 1) used when computing raster min/max values via the cumulative count cut method."_s,
63 return mLimits == other.mLimits
64 && mExtent == other.mExtent
65 && mAccuracy == other.mAccuracy
66 && std::fabs( mCumulativeCutLower - other.mCumulativeCutLower ) < 1e-5
67 && std::fabs( mCumulativeCutUpper - other.mCumulativeCutUpper ) < 1e-5
68 && std::fabs( mStdDevFactor - other.mStdDevFactor ) < 1e-5;
80 return u
"CumulativeCut"_s;
89 if (
limits ==
"MinMax"_L1 )
93 else if (
limits ==
"StdDev"_L1 )
97 else if (
limits ==
"CumulativeCut"_L1 )
106 switch ( minMaxExtent )
109 return u
"WholeRaster"_s;
111 return u
"CurrentCanvas"_s;
113 return u
"UpdatedCanvas"_s;
115 return u
"WholeRaster"_s;
120 if (
extent ==
"WholeRaster"_L1 )
124 else if (
extent ==
"CurrentCanvas"_L1 )
128 else if (
extent ==
"UpdatedCanvas"_L1 )
145 return u
"Estimated"_s;
152 if ( accuracy ==
"Exact"_L1 )
160 QDomElement limitsElem = doc.createElement( u
"limits"_s );
161 const QDomText limitsText = doc.createTextNode(
limitsString( mLimits ) );
162 limitsElem.appendChild( limitsText );
163 parentElem.appendChild( limitsElem );
166 QDomElement extentElem = doc.createElement( u
"extent"_s );
167 const QDomText extentText = doc.createTextNode(
extentString( mExtent ) );
168 extentElem.appendChild( extentText );
169 parentElem.appendChild( extentElem );
172 QDomElement statAccuracyElem = doc.createElement( u
"statAccuracy"_s );
173 const QDomText statAccuracyText = doc.createTextNode(
statAccuracyString( mAccuracy ) );
174 statAccuracyElem.appendChild( statAccuracyText );
175 parentElem.appendChild( statAccuracyElem );
178 QDomElement cumulativeCutLowerElem = doc.createElement( u
"cumulativeCutLower"_s );
179 const QDomText cumulativeCutLowerText = doc.createTextNode( QString::number( mCumulativeCutLower ) );
180 cumulativeCutLowerElem.appendChild( cumulativeCutLowerText );
181 parentElem.appendChild( cumulativeCutLowerElem );
184 QDomElement cumulativeCutUpperElem = doc.createElement( u
"cumulativeCutUpper"_s );
185 const QDomText cumulativeCutUpperText = doc.createTextNode( QString::number( mCumulativeCutUpper ) );
186 cumulativeCutUpperElem.appendChild( cumulativeCutUpperText );
187 parentElem.appendChild( cumulativeCutUpperElem );
190 QDomElement stdDevFactorElem = doc.createElement( u
"stdDevFactor"_s );
191 const QDomText stdDevFactorText = doc.createTextNode( QString::number( mStdDevFactor ) );
192 stdDevFactorElem.appendChild( stdDevFactorText );
193 parentElem.appendChild( stdDevFactorElem );
198 const QDomElement limitsElem = elem.firstChildElement( u
"limits"_s );
199 if ( !limitsElem.isNull() )
204 const QDomElement extentElem = elem.firstChildElement( u
"extent"_s );
205 if ( !extentElem.isNull() )
210 const QDomElement statAccuracyElem = elem.firstChildElement( u
"statAccuracy"_s );
211 if ( !statAccuracyElem.isNull() )
216 const QDomElement cumulativeCutLowerElem = elem.firstChildElement( u
"cumulativeCutLower"_s );
217 if ( !cumulativeCutLowerElem.isNull() )
219 mCumulativeCutLower = cumulativeCutLowerElem.text().toDouble();
222 const QDomElement cumulativeCutUpperElem = elem.firstChildElement( u
"cumulativeCutUpper"_s );
223 if ( !cumulativeCutUpperElem.isNull() )
225 mCumulativeCutUpper = cumulativeCutUpperElem.text().toDouble();
228 const QDomElement stdDevFactorElem = elem.firstChildElement( u
"stdDevFactor"_s );
229 if ( !stdDevFactorElem.isNull() )
231 mStdDevFactor = stdDevFactorElem.text().toDouble();
RasterRangeLimit
Describes the limits used to compute raster ranges (min/max values).
@ CumulativeCut
Range is [ min + cumulativeCutLower() * (max - min), min + cumulativeCutUpper() * (max - min) ].
@ StdDev
Range is [ mean - stdDevFactor() * stddev, mean + stdDevFactor() * stddev ].
@ MinimumMaximum
Real min-max values.
RasterRangeAccuracy
Describes the accuracy used to compute raster ranges (min/max values).
@ Estimated
Approximated statistics.
QFlags< SettingsOption > SettingsOptions
RasterRangeExtent
Describes the extent used to compute raster ranges (min/max values).
@ UpdatedCanvas
Constantly updated extent of the canvas is used to compute statistics.
@ WholeRaster
Whole raster is used to compute statistics.
@ FixedCanvas
Current extent of the canvas (at the time of computation) is used to compute statistics.
static QString limitsString(Qgis::RasterRangeLimit limits)
Returns a string to serialize Limits.
Qgis::RasterRangeExtent extent() const
Returns the raster extent.
static Qgis::RasterRangeAccuracy statAccuracyFromString(const QString &accuracy)
Deserialize StatAccuracy.
static constexpr double CUMULATIVE_CUT_UPPER
Default cumulative cut upper limit.
static QString statAccuracyString(Qgis::RasterRangeAccuracy accuracy)
Returns a string to serialize StatAccuracy.
static constexpr double DEFAULT_STDDEV_FACTOR
Default standard deviation factor.
static QString extentString(Qgis::RasterRangeExtent extent)
Returns a string to serialize Extent.
static const QgsSettingsEntryDouble * settingsCumulativeCutUpper
bool operator==(const QgsRasterMinMaxOrigin &other) const
static constexpr double CUMULATIVE_CUT_LOWER
Default cumulative cut lower limit.
void writeXml(QDomDocument &doc, QDomElement &parentElem) const
Serialize object.
void readXml(const QDomElement &elem)
Deserialize object.
static Qgis::RasterRangeLimit limitsFromString(const QString &limits)
Deserialize Limits.
Qgis::RasterRangeLimit limits() const
Returns the raster limits.
static const QgsSettingsEntryDouble * settingsCumulativeCutLower
static Qgis::RasterRangeExtent extentFromString(const QString &extent)
Deserialize Extent.
static const QgsSettingsEntryDouble * settingsDefaultStandardDeviation
static QgsSettingsTreeNode * sTreeRaster
#define BUILTIN_UNREACHABLE