Skip to content

Commit

Permalink
add option to filter negative and 0 values in logarithmic method
Browse files Browse the repository at this point in the history
  • Loading branch information
3nids committed Dec 4, 2019
1 parent 011b63f commit a6e1920
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 5 deletions.
30 changes: 26 additions & 4 deletions src/core/classification/qgsclassificationlogarithmic.cpp
Expand Up @@ -13,14 +13,17 @@
* *
***************************************************************************/

#include <QObject>

#include "qgsclassificationlogarithmic.h"
#include "qgssymbollayerutils.h"
#include "qgsapplication.h"

QgsClassificationLogarithmic::QgsClassificationLogarithmic()
: QgsClassificationMethod( ValuesNotRequired, 0 )
: QgsClassificationMethod( NoFlag, 0 )
{

QgsProcessingParameterBoolean *param = new QgsProcessingParameterBoolean( QStringLiteral( "FILTER_ZERO_NEG_VALUES" ), QObject::tr( "Filter values <= 0" ), false );
addParameter( param );
}


Expand All @@ -46,9 +49,24 @@ QIcon QgsClassificationLogarithmic::icon() const
return QgsApplication::getThemeIcon( "classification_methods/mClassificationLogarithmic.svg" );
}

QList<double> QgsClassificationLogarithmic::calculateBreaks( double minimum, double maximum, const QList<double> &values, int nclasses )
QList<double> QgsClassificationLogarithmic::calculateBreaks( double &minimum, double &maximum, const QList<double> &values, int nclasses )
{
Q_UNUSED( values )
// not possible if only negative values
if ( maximum <= 0 )
return QList<double>();

if ( parameterValue( QStringLiteral( "FILTER_ZERO_NEG_VALUES" ) ).toBool() && minimum <= 0 )
{
Q_ASSERT( values.count() );
minimum = std::numeric_limits<double>::max();
for ( int i = 0; i < values.count(); i++ )
{
if ( values.at( i ) > 0 )
minimum = std::min( minimum, values.at( i ) );
}
if ( minimum == std::numeric_limits<double>::max() )
return QList<double>();
}

// get the min/max in log10 scale
double log_min = std::floor( std::log10( minimum ) );
Expand Down Expand Up @@ -89,3 +107,7 @@ QString QgsClassificationLogarithmic::labelForRange( double lowerValue, double u
return labelFormat().arg( lowerLabel ).arg( upperLabel );
}

bool QgsClassificationLogarithmic::valuesRequired() const
{
return parameterValue( QStringLiteral( "FILTER_ZERO_NEG_VALUES" ) ).toBool();
}
5 changes: 4 additions & 1 deletion src/core/classification/qgsclassificationlogarithmic.h
Expand Up @@ -34,10 +34,13 @@ class CORE_EXPORT QgsClassificationLogarithmic : public QgsClassificationMethod
QString id() const override;
QIcon icon() const override;
QString labelForRange( double lowerValue, double upperValue, ClassPosition position ) const override;
bool valuesRequired() const override;

private:
QList<double> calculateBreaks( double minimum, double maximum, const QList<double> &values, int nclasses ) override;
QList<double> calculateBreaks( double &minimum, double &maximum, const QList<double> &values, int nclasses ) override;
QString valueToLabel( double value ) const override;


};

#endif // QGSCLASSIFICATIONLOGARITHMIC_H

0 comments on commit a6e1920

Please sign in to comment.