Skip to content

Commit a646101

Browse files
committedFeb 12, 2014
Fix #8758 (graduated classes on expression broken)
1 parent 18b1bdb commit a646101

File tree

1 file changed

+23
-7
lines changed

1 file changed

+23
-7
lines changed
 

‎src/core/symbology-ng/qgsgraduatedsymbolrendererv2.cpp

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -641,6 +641,9 @@ static QList<double> _calcJenksBreaks( QList<double> values, int classes,
641641
// Returns class breaks such that classes are internally homogeneous while
642642
// assuring heterogeneity among classes.
643643

644+
if ( !values.count() )
645+
return QList<double>();
646+
644647
if ( classes <= 1 )
645648
{
646649
return QList<double>() << maximum;
@@ -772,15 +775,22 @@ QgsGraduatedSymbolRendererV2* QgsGraduatedSymbolRendererV2::createRenderer(
772775
int attrNum = vlayer->fieldNameIndex( attrName );
773776
double minimum;
774777
double maximum;
778+
779+
QScopedPointer<QgsExpression> expression;
780+
775781
if ( attrNum == -1 )
776782
{
783+
// try to use expression
784+
expression.reset( new QgsExpression( attrName ) );
785+
if ( expression->hasParserError() || !expression->prepare( vlayer->pendingFields() ) )
786+
return 0; // should have a means to report errors
787+
777788
QList<double> values;
778789
QgsFeatureIterator fit = vlayer->getFeatures();
779790
QgsFeature feature;
780-
QgsExpression expression( attrName );
781791
while ( fit.nextFeature( feature ) )
782792
{
783-
values << expression.evaluate( feature ).toDouble();
793+
values << expression->evaluate( feature ).toDouble();
784794
}
785795
qSort( values );
786796
minimum = values.first();
@@ -808,15 +818,21 @@ QgsGraduatedSymbolRendererV2* QgsGraduatedSymbolRendererV2::createRenderer(
808818
// get values from layer
809819
QList<double> values;
810820
QgsFeature f;
811-
QgsAttributeList lst;
812-
lst.append( attrNum );
821+
QStringList lst;
822+
if ( expression.isNull() )
823+
lst.append( attrName );
824+
else
825+
lst = expression->referencedColumns();
813826

814-
QgsFeatureIterator fit = vlayer->getFeatures( QgsFeatureRequest().setFlags( QgsFeatureRequest::NoGeometry ).setSubsetOfAttributes( lst ) );
827+
QgsFeatureIterator fit = vlayer->getFeatures( QgsFeatureRequest().setFlags( QgsFeatureRequest::NoGeometry ).setSubsetOfAttributes( lst, vlayer->pendingFields() ) );
815828

816829
// create list of non-null attribute values
817830
while ( fit.nextFeature( f ) )
818-
if ( !f.attribute( attrNum ).isNull() )
819-
values.append( f.attribute( attrNum ).toDouble() );
831+
{
832+
QVariant v = expression.isNull() ? f.attribute( attrNum ) : expression->evaluate( f );
833+
if ( !v.isNull() )
834+
values.append( v.toDouble() );
835+
}
820836

821837
// calculate the breaks
822838
if ( mode == Quantile )

0 commit comments

Comments
 (0)
Please sign in to comment.