Skip to content

Commit 40e53e0

Browse files
committed
- added warning and chance to cancel Natural break classification for
dataset >50k records - modified test script to generate gowing sizes tables (for timing)
1 parent 18cff28 commit 40e53e0

File tree

2 files changed

+34
-21
lines changed

2 files changed

+34
-21
lines changed

src/gui/symbology-ng/qgsgraduatedsymbolrendererv2widget.cpp

+9
Original file line numberDiff line numberDiff line change
@@ -482,6 +482,15 @@ void QgsGraduatedSymbolRendererV2Widget::classifyGraduated()
482482
else // default should be quantile for now
483483
mode = QgsGraduatedSymbolRendererV2::Quantile;
484484

485+
486+
// Jenks is n^2 complexity, warn for big dataset (more than 50k records)
487+
// and give the user the chance to cancel
488+
if ( QgsGraduatedSymbolRendererV2::Jenks == mode
489+
&& mLayer->featureCount() > 50000 )
490+
{
491+
if ( QMessageBox::Cancel == QMessageBox::question( this, tr( "Warning" ), tr( "Natural break classification (Jenks) is O(n2) complexity, your classification may take a long time." ), QMessageBox::Cancel, QMessageBox::Ok ) ) return;
492+
}
493+
485494
// create and set new renderer
486495
QApplication::setOverrideCursor( Qt::WaitCursor );
487496
QgsGraduatedSymbolRendererV2* r = QgsGraduatedSymbolRendererV2::createRenderer(

tests/src/python/test_qgsissue6483.py

+25-21
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
import os
1616
import random
17+
import math
1718

1819
from qgis.core import *
1920
from qgis.gui import *
@@ -45,23 +46,29 @@ def setUpClass(cls):
4546
sql = "SELECT InitSpatialMetadata()"
4647
cur.execute(sql)
4748

48-
# simple table with primary key
49-
sql = "CREATE TABLE test_mpg (id SERIAL PRIMARY KEY, height DOUBLE)"
50-
cur.execute(sql)
51-
sql = "SELECT AddGeometryColumn('test_mpg', 'geometry', 4326, 'MULTIPOLYGON', 'XY')"
52-
cur.execute(sql)
53-
for i in range(0,253):
54-
for j in range (0,253):
55-
sql = "INSERT INTO test_mpg (height, geometry) "
56-
sql += "VALUES ("+str(random.random())+", GeomFromText('MULTIPOLYGON((("
57-
sql += str(i) + " " + str(j) + ","
58-
sql += str(i+1) + " " + str(j) + ","
59-
sql += str(i+1) + " " + str(j+1) + ","
60-
sql += str(i) + " " + str(j+1) + ","
61-
sql += str(i) + " " + str(j) + ")))', 4326))"
62-
cur.execute(sql)
63-
64-
con.commit()
49+
# growing size tables
50+
nbOrders = 7
51+
for order in range(0,nbOrders):
52+
size = 10000*pow(2,order);
53+
tab = "test_mpg_" + str(size) + "_rows"
54+
print "creating table " + tab + " " + str(order) + "/" + str(nbOrders)
55+
sql = "CREATE TABLE " + tab + " (id SERIAL PRIMARY KEY, height DOUBLE)"
56+
cur.execute(sql)
57+
sql = "SELECT AddGeometryColumn('" + tab + "', 'geometry', 4326, 'MULTIPOLYGON', 'XY')"
58+
cur.execute(sql)
59+
r = int(math.sqrt(size))
60+
for i in range(0,r):
61+
for j in range (0,r):
62+
sql = "INSERT INTO " + tab + " (height, geometry) "
63+
sql += "VALUES ("+str(random.random())+", GeomFromText('MULTIPOLYGON((("
64+
sql += str(i) + " " + str(j) + ","
65+
sql += str(i+1) + " " + str(j) + ","
66+
sql += str(i+1) + " " + str(j+1) + ","
67+
sql += str(i) + " " + str(j+1) + ","
68+
sql += str(i) + " " + str(j) + ")))', 4326))"
69+
cur.execute(sql)
70+
con.commit()
71+
6572
con.close()
6673

6774
@classmethod
@@ -81,10 +88,7 @@ def tearDown(self):
8188
pass
8289

8390
def test_Nothing(self):
84-
"""Create spatialite database"""
85-
layer = QgsVectorLayer("dbname=test.sqlite table=test_mpg (geometry)", "test_mpg", "spatialite")
86-
assert(layer.isValid())
87-
assert(layer.hasGeometryType())
91+
"""do nothing"""
8892

8993

9094

0 commit comments

Comments
 (0)