Skip to content

Commit 18ddc4e

Browse files
committedJun 13, 2018
Expose choice of bounds handling during reclassification
1 parent f0f5211 commit 18ddc4e

File tree

2 files changed

+42
-6
lines changed

2 files changed

+42
-6
lines changed
 

‎src/analysis/processing/qgsalgorithmreclassifybylayer.cpp

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,16 @@ void QgsReclassifyAlgorithmBase::initAlgorithm( const QVariantMap &configuration
5050
QObject::tr( "Output no data value" ), QgsProcessingParameterNumber::Double, -9999 );
5151
noDataValueParam->setFlags( QgsProcessingParameterDefinition::FlagAdvanced );
5252
addParameter( noDataValueParam.release() );
53+
54+
std::unique_ptr< QgsProcessingParameterEnum > boundsHandling = qgis::make_unique< QgsProcessingParameterEnum >( QStringLiteral( "RANGE_BOUNDARIES" ),
55+
QObject::tr( "Range boundaries" ), QStringList() << QObject::tr( "min < value <= max" )
56+
<< QObject::tr( "min <= value < max" )
57+
<< QObject::tr( "min <= value <= max" )
58+
<< QObject::tr( "min < value < max" ),
59+
false, 0 );
60+
boundsHandling->setFlags( QgsProcessingParameterDefinition::FlagAdvanced );
61+
addParameter( boundsHandling.release() );
62+
5363
addParameter( new QgsProcessingParameterRasterDestination( QStringLiteral( "OUTPUT" ), QObject::tr( "Reclassified raster" ) ) );
5464
}
5565

@@ -71,6 +81,27 @@ bool QgsReclassifyAlgorithmBase::prepareAlgorithm( const QVariantMap &parameters
7181

7282
mNoDataValue = parameterAsDouble( parameters, QStringLiteral( "NO_DATA" ), context );
7383

84+
85+
int boundsType = parameterAsEnum( parameters, QStringLiteral( "RANGE_BOUNDARIES" ), context );
86+
switch ( boundsType )
87+
{
88+
case 0:
89+
mBoundsType = QgsReclassifyUtils::RasterClass::IncludeMax;
90+
break;
91+
92+
case 1:
93+
mBoundsType = QgsReclassifyUtils::RasterClass::IncludeMin;
94+
break;
95+
96+
case 2:
97+
mBoundsType = QgsReclassifyUtils::RasterClass::IncludeMinAndMax;
98+
break;
99+
100+
case 3:
101+
mBoundsType = QgsReclassifyUtils::RasterClass::Exclusive;
102+
break;
103+
}
104+
74105
return _prepareAlgorithm( parameters, context, feedback );
75106
}
76107

@@ -167,7 +198,7 @@ bool QgsReclassifyByLayerAlgorithm::_prepareAlgorithm( const QVariantMap &parame
167198
return true;
168199
}
169200

170-
QVector<QgsReclassifyUtils::RasterClass> QgsReclassifyByLayerAlgorithm::createClasses( const QVariantMap &, QgsProcessingContext &, QgsProcessingFeedback * )
201+
QVector<QgsReclassifyUtils::RasterClass> QgsReclassifyByLayerAlgorithm::createClasses( QgsRasterRange::BoundsType boundsType, const QVariantMap &, QgsProcessingContext &, QgsProcessingFeedback * )
171202
{
172203
QVector< QgsReclassifyUtils::RasterClass > classes;
173204
QgsFeature f;
@@ -184,7 +215,7 @@ QVector<QgsReclassifyUtils::RasterClass> QgsReclassifyByLayerAlgorithm::createCl
184215
if ( !ok )
185216
throw QgsProcessingException( QObject::tr( "Invalid output value: %1" ).arg( f.attribute( mValueFieldIdx ).toString() ) );
186217

187-
classes << QgsReclassifyUtils::RasterClass( minValue, maxValue, QgsRasterRange::IncludeMax, value );
218+
classes << QgsReclassifyUtils::RasterClass( minValue, maxValue, boundsType, value );
188219
}
189220
return classes;
190221
}
@@ -233,7 +264,7 @@ bool QgsReclassifyByTableAlgorithm::_prepareAlgorithm( const QVariantMap &, QgsP
233264
return true;
234265
}
235266

236-
QVector<QgsReclassifyUtils::RasterClass> QgsReclassifyByTableAlgorithm::createClasses( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback * )
267+
QVector<QgsReclassifyUtils::RasterClass> QgsReclassifyByTableAlgorithm::createClasses( QgsReclassifyUtils::RasterClass::BoundsType boundsType, const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback * )
237268
{
238269
const QVariantList table = parameterAsMatrix( parameters, QStringLiteral( "TABLE" ), context );
239270
int rows = table.count() / 3;
@@ -251,7 +282,7 @@ QVector<QgsReclassifyUtils::RasterClass> QgsReclassifyByTableAlgorithm::createCl
251282
if ( !ok )
252283
throw QgsProcessingException( QObject::tr( "Invalid output value: %1" ).arg( table.at( row * 3 + 2 ).toString() ) );
253284

254-
classes << QgsReclassifyUtils::RasterClass( minValue, maxValue, QgsRasterRange::IncludeMax, value );
285+
classes << QgsReclassifyUtils::RasterClass( minValue, maxValue, boundsType, value );
255286
}
256287
return classes;
257288
}

‎src/analysis/processing/qgsalgorithmreclassifybylayer.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,9 @@ class QgsReclassifyAlgorithmBase : public QgsProcessingAlgorithm
5555
/**
5656
* Returns a list of classes to use during the reclassification.
5757
*/
58-
virtual QVector< QgsReclassifyUtils::RasterClass > createClasses( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) = 0;
58+
virtual QVector< QgsReclassifyUtils::RasterClass > createClasses(
59+
QgsReclassifyUtils::RasterClass::BoundsType boundsType,
60+
const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) = 0;
5961

6062
QVariantMap processAlgorithm( const QVariantMap &parameters,
6163
QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override final;
@@ -70,6 +72,7 @@ class QgsReclassifyAlgorithmBase : public QgsProcessingAlgorithm
7072
double mRasterUnitsPerPixelY = 0;
7173
int mNbCellsXProvider = 0;
7274
int mNbCellsYProvider = 0;
75+
QgsReclassifyUtils::RasterClass::BoundsType mBoundsType = QgsReclassifyUtils::RasterClass::IncludeMax;
7376
};
7477

7578
/**
@@ -90,7 +93,9 @@ class QgsReclassifyByLayerAlgorithm : public QgsReclassifyAlgorithmBase
9093
protected:
9194
void addAlgorithmParams() override;
9295
bool _prepareAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
93-
QVector< QgsReclassifyUtils::RasterClass > createClasses( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
96+
QVector< QgsReclassifyUtils::RasterClass > createClasses(
97+
QgsReclassifyUtils::RasterClass::BoundsType boundsType,
98+
const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
9499

95100
private:
96101
int mMinFieldIdx = -1;

0 commit comments

Comments
 (0)
Please sign in to comment.