mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-04 00:04:03 -04:00
Merge pull request #63298 from elpaso/bugfix-gh63277-fixed-interval-single-class
Symbol renderer: special case for fixed interval single class
This commit is contained in:
commit
42feace4f9
@ -62,7 +62,15 @@ QList<double> QgsClassificationFixedInterval::calculateBreaks( double &minimum,
|
||||
return breaks;
|
||||
}
|
||||
|
||||
// Single class
|
||||
if ( minimum == maximum )
|
||||
{
|
||||
breaks << maximum + interval;
|
||||
return breaks;
|
||||
}
|
||||
|
||||
double value = minimum;
|
||||
|
||||
while ( value < maximum )
|
||||
{
|
||||
value += interval;
|
||||
|
@ -45,6 +45,13 @@ QList<double> QgsClassificationPrettyBreaks::calculateBreaks( double &minimum, d
|
||||
if ( symmetricModeEnabled() )
|
||||
makeBreaksSymmetric( breaks, symmetryPoint(), symmetryAstride() );
|
||||
|
||||
// Special case for single class
|
||||
if ( minimum == maximum && breaks.isEmpty() )
|
||||
{
|
||||
// 1 is totally arbitrary but we need something
|
||||
breaks << maximum + 1.0;
|
||||
}
|
||||
|
||||
return breaks;
|
||||
}
|
||||
|
||||
|
@ -26,6 +26,8 @@ from qgis.core import (
|
||||
QgsRendererRangeLabelFormat,
|
||||
QgsVectorLayer,
|
||||
QgsFillSymbol,
|
||||
QgsClassificationFixedInterval,
|
||||
QgsClassificationPrettyBreaks,
|
||||
)
|
||||
import unittest
|
||||
from qgis.testing import start_app, QgisTestCase
|
||||
@ -770,6 +772,64 @@ class TestQgsGraduatedSymbolRenderer(QgisTestCase):
|
||||
|
||||
self.assertEqual(dom.toString(), expected)
|
||||
|
||||
def testFixedIntervalSingleClass(self):
|
||||
"""Test single class with fixed interval, issue GH #63277"""
|
||||
|
||||
# Create a renderer
|
||||
renderer = QgsGraduatedSymbolRenderer()
|
||||
renderer.setClassificationMethod(QgsClassificationFixedInterval())
|
||||
symbol = createMarkerSymbol()
|
||||
renderer.setSourceSymbol(symbol.clone())
|
||||
|
||||
# Test retrieving data values from a layer
|
||||
ml = createMemoryLayer((0, 0))
|
||||
|
||||
renderer.setClassAttribute("value")
|
||||
# Equal interval calculations
|
||||
renderer.updateClasses(ml, 5)
|
||||
self.assertEqual(
|
||||
dumpRangeBreaks(renderer.ranges()),
|
||||
"(0.0000-1.0000,)",
|
||||
"Fixed interval classification not correct",
|
||||
)
|
||||
|
||||
ml = createMemoryLayer((1, 1))
|
||||
renderer.updateClasses(ml, 5)
|
||||
self.assertEqual(
|
||||
dumpRangeBreaks(renderer.ranges()),
|
||||
"(1.0000-2.0000,)",
|
||||
"Fixed interval classification not correct",
|
||||
)
|
||||
|
||||
def testPrettyBreakSingleClass(self):
|
||||
"""Test single class with pretty break, issue GH #63277"""
|
||||
|
||||
# Create a renderer
|
||||
renderer = QgsGraduatedSymbolRenderer()
|
||||
renderer.setClassificationMethod(QgsClassificationPrettyBreaks())
|
||||
symbol = createMarkerSymbol()
|
||||
renderer.setSourceSymbol(symbol.clone())
|
||||
|
||||
# Test retrieving data values from a layer
|
||||
ml = createMemoryLayer((0, 0))
|
||||
|
||||
renderer.setClassAttribute("value")
|
||||
# Equal interval calculations
|
||||
renderer.updateClasses(ml, 5)
|
||||
self.assertEqual(
|
||||
dumpRangeBreaks(renderer.ranges()),
|
||||
"(0.0000-1.0000,)",
|
||||
"Pretty breaks classification not correct",
|
||||
)
|
||||
|
||||
ml = createMemoryLayer((1, 1))
|
||||
renderer.updateClasses(ml, 5)
|
||||
self.assertEqual(
|
||||
dumpRangeBreaks(renderer.ranges()),
|
||||
"(1.0000-2.0000,)",
|
||||
"Pretty breaks classification not correct",
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
Loading…
x
Reference in New Issue
Block a user