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 #include "qgsrasterminmaxorigin.h" 19 #include "qgssettings.h" 20 21 #include <QDomDocument> 22 #include <QDomElement> 23 #include <cmath> 24 QgsRasterMinMaxOrigin()25QgsRasterMinMaxOrigin::QgsRasterMinMaxOrigin() 26 : mCumulativeCutLower( CUMULATIVE_CUT_LOWER ) 27 , mCumulativeCutUpper( CUMULATIVE_CUT_UPPER ) 28 , mStdDevFactor( DEFAULT_STDDEV_FACTOR ) 29 { 30 const QgsSettings mySettings; 31 mCumulativeCutLower = mySettings.value( QStringLiteral( "Raster/cumulativeCutLower" ), CUMULATIVE_CUT_LOWER ).toDouble(); 32 mCumulativeCutUpper = mySettings.value( QStringLiteral( "Raster/cumulativeCutUpper" ), CUMULATIVE_CUT_UPPER ).toDouble(); 33 mStdDevFactor = mySettings.value( QStringLiteral( "Raster/defaultStandardDeviation" ), DEFAULT_STDDEV_FACTOR ).toDouble(); 34 } 35 operator ==(const QgsRasterMinMaxOrigin & other) const36bool QgsRasterMinMaxOrigin::operator ==( const QgsRasterMinMaxOrigin &other ) const 37 { 38 return mLimits == other.mLimits && 39 mExtent == other.mExtent && 40 mAccuracy == other.mAccuracy && 41 std::fabs( mCumulativeCutLower - other.mCumulativeCutLower ) < 1e-5 && 42 std::fabs( mCumulativeCutUpper - other.mCumulativeCutUpper ) < 1e-5 && 43 std::fabs( mStdDevFactor - other.mStdDevFactor ) < 1e-5; 44 } 45 limitsString(Limits limits)46QString QgsRasterMinMaxOrigin::limitsString( Limits limits ) 47 { 48 switch ( limits ) 49 { 50 case MinMax: 51 return QStringLiteral( "MinMax" ); 52 case StdDev: 53 return QStringLiteral( "StdDev" ); 54 case CumulativeCut: 55 return QStringLiteral( "CumulativeCut" ); 56 default: 57 break; 58 } 59 return QStringLiteral( "None" ); 60 } 61 limitsFromString(const QString & limits)62QgsRasterMinMaxOrigin::Limits QgsRasterMinMaxOrigin::limitsFromString( const QString &limits ) 63 { 64 if ( limits == QLatin1String( "MinMax" ) ) 65 { 66 return MinMax; 67 } 68 else if ( limits == QLatin1String( "StdDev" ) ) 69 { 70 return StdDev; 71 } 72 else if ( limits == QLatin1String( "CumulativeCut" ) ) 73 { 74 return CumulativeCut; 75 } 76 return None; 77 } 78 extentString(Extent minMaxExtent)79QString QgsRasterMinMaxOrigin::extentString( Extent minMaxExtent ) 80 { 81 switch ( minMaxExtent ) 82 { 83 case WholeRaster: 84 return QStringLiteral( "WholeRaster" ); 85 case CurrentCanvas: 86 return QStringLiteral( "CurrentCanvas" ); 87 case UpdatedCanvas: 88 return QStringLiteral( "UpdatedCanvas" ); 89 } 90 return QStringLiteral( "WholeRaster" ); 91 } 92 extentFromString(const QString & extent)93QgsRasterMinMaxOrigin::Extent QgsRasterMinMaxOrigin::extentFromString( const QString &extent ) 94 { 95 if ( extent == QLatin1String( "WholeRaster" ) ) 96 { 97 return WholeRaster; 98 } 99 else if ( extent == QLatin1String( "CurrentCanvas" ) ) 100 { 101 return CurrentCanvas; 102 } 103 else if ( extent == QLatin1String( "UpdatedCanvas" ) ) 104 { 105 return UpdatedCanvas; 106 } 107 else 108 { 109 return WholeRaster; 110 } 111 } 112 statAccuracyString(StatAccuracy accuracy)113QString QgsRasterMinMaxOrigin::statAccuracyString( StatAccuracy accuracy ) 114 { 115 if ( accuracy == Exact ) 116 return QStringLiteral( "Exact" ); 117 return QStringLiteral( "Estimated" ); 118 } 119 statAccuracyFromString(const QString & accuracy)120QgsRasterMinMaxOrigin::StatAccuracy QgsRasterMinMaxOrigin::statAccuracyFromString( const QString &accuracy ) 121 { 122 if ( accuracy == QLatin1String( "Exact" ) ) 123 return Exact; 124 return Estimated; 125 } 126 writeXml(QDomDocument & doc,QDomElement & parentElem) const127void QgsRasterMinMaxOrigin::writeXml( QDomDocument &doc, QDomElement &parentElem ) const 128 { 129 // limits 130 QDomElement limitsElem = doc.createElement( QStringLiteral( "limits" ) ); 131 const QDomText limitsText = doc.createTextNode( limitsString( mLimits ) ); 132 limitsElem.appendChild( limitsText ); 133 parentElem.appendChild( limitsElem ); 134 135 // extent 136 QDomElement extentElem = doc.createElement( QStringLiteral( "extent" ) ); 137 const QDomText extentText = doc.createTextNode( extentString( mExtent ) ); 138 extentElem.appendChild( extentText ); 139 parentElem.appendChild( extentElem ); 140 141 // statAccuracy 142 QDomElement statAccuracyElem = doc.createElement( QStringLiteral( "statAccuracy" ) ); 143 const QDomText statAccuracyText = doc.createTextNode( statAccuracyString( mAccuracy ) ); 144 statAccuracyElem.appendChild( statAccuracyText ); 145 parentElem.appendChild( statAccuracyElem ); 146 147 // mCumulativeCutLower 148 QDomElement cumulativeCutLowerElem = doc.createElement( QStringLiteral( "cumulativeCutLower" ) ); 149 const QDomText cumulativeCutLowerText = doc.createTextNode( QString::number( mCumulativeCutLower ) ); 150 cumulativeCutLowerElem.appendChild( cumulativeCutLowerText ); 151 parentElem.appendChild( cumulativeCutLowerElem ); 152 153 // mCumulativeCutUpper 154 QDomElement cumulativeCutUpperElem = doc.createElement( QStringLiteral( "cumulativeCutUpper" ) ); 155 const QDomText cumulativeCutUpperText = doc.createTextNode( QString::number( mCumulativeCutUpper ) ); 156 cumulativeCutUpperElem.appendChild( cumulativeCutUpperText ); 157 parentElem.appendChild( cumulativeCutUpperElem ); 158 159 // mCumulativeCutUpper 160 QDomElement stdDevFactorElem = doc.createElement( QStringLiteral( "stdDevFactor" ) ); 161 const QDomText stdDevFactorText = doc.createTextNode( QString::number( mStdDevFactor ) ); 162 stdDevFactorElem.appendChild( stdDevFactorText ); 163 parentElem.appendChild( stdDevFactorElem ); 164 } 165 readXml(const QDomElement & elem)166void QgsRasterMinMaxOrigin::readXml( const QDomElement &elem ) 167 { 168 const QDomElement limitsElem = elem.firstChildElement( QStringLiteral( "limits" ) ); 169 if ( !limitsElem.isNull() ) 170 { 171 mLimits = limitsFromString( limitsElem.text() ); 172 } 173 174 const QDomElement extentElem = elem.firstChildElement( QStringLiteral( "extent" ) ); 175 if ( !extentElem.isNull() ) 176 { 177 mExtent = extentFromString( extentElem.text() ); 178 } 179 180 const QDomElement statAccuracyElem = elem.firstChildElement( QStringLiteral( "statAccuracy" ) ); 181 if ( !statAccuracyElem.isNull() ) 182 { 183 mAccuracy = statAccuracyFromString( statAccuracyElem.text() ); 184 } 185 186 const QDomElement cumulativeCutLowerElem = elem.firstChildElement( QStringLiteral( "cumulativeCutLower" ) ); 187 if ( !cumulativeCutLowerElem.isNull() ) 188 { 189 mCumulativeCutLower = cumulativeCutLowerElem.text().toDouble(); 190 } 191 192 const QDomElement cumulativeCutUpperElem = elem.firstChildElement( QStringLiteral( "cumulativeCutUpper" ) ); 193 if ( !cumulativeCutUpperElem.isNull() ) 194 { 195 mCumulativeCutUpper = cumulativeCutUpperElem.text().toDouble(); 196 } 197 198 const QDomElement stdDevFactorElem = elem.firstChildElement( QStringLiteral( "stdDevFactor" ) ); 199 if ( !stdDevFactorElem.isNull() ) 200 { 201 mStdDevFactor = stdDevFactorElem.text().toDouble(); 202 } 203 } 204