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