@@ -31,6 +31,7 @@ def run(self):
3131 newfields .extend (provider .fields ())
3232 newfields .append (maxpfield )
3333
34+ bad_value = - 1
3435 clspyfeatures = {}
3536 for feat in provider .getFeatures ():
3637 uid = feat .id ()
@@ -42,37 +43,48 @@ def run(self):
4243 neighbors .discard (uid )
4344 thresholdval = feat .attribute (self .thresholdattr )
4445 attributeval = feat .attribute (self .attrname )
46+
47+ if thresholdval == None or attributeval == None :
48+ bad_value = uid
49+ break
50+
4551 clspyfeatures [uid ] = ClusterpyFeature (uid , thresholdval ,
4652 neighbors , attributeval )
4753
4854 outputmsg = None
49- valid , islands = validtopology (clspyfeatures )
50- if valid :
51- self .progress .emit (1.0 )
52- regions = execmaxp (clspyfeatures ,
53- self .threshold ,
54- self .maxit ,
55- self .tabusize ,
56- self .tabumax ,
57- self .progress .emit )
58- self .progress .emit (95.0 )
59- newlayer = QgsVectorFileWriter ( self .output_path ,
60- None ,
61- newfields ,
62- provider .geometryType (),
63- provider .crs ())
55+ valid = True
56+ if bad_value != - 1 :
57+ valid = False
58+ outputmsg = "Please review feature with ID: " + str (bad_value ) + \
59+ " and assign a numeric value to the NULL or empty attributes."
60+ else :
61+ valid , islands = validtopology (clspyfeatures )
62+ if valid :
63+ self .progress .emit (1.0 )
64+ regions = execmaxp (clspyfeatures ,
65+ self .threshold ,
66+ self .maxit ,
67+ self .tabusize ,
68+ self .tabumax ,
69+ self .progress .emit )
70+ self .progress .emit (95.0 )
71+ newlayer = QgsVectorFileWriter ( self .output_path ,
72+ None ,
73+ newfields ,
74+ provider .geometryType (),
75+ provider .crs ())
6476
65- for area in self .layer .getFeatures ():
66- newarea = QgsFeature ()
67- newarea .setGeometry (area .geometry ())
68- attrs = area .attributes ()
69- attrs .append (regions [area .id ()])
70- newarea .setAttributes (attrs )
71- newlayer .addFeature (newarea )
77+ for area in self .layer .getFeatures ():
78+ newarea = QgsFeature ()
79+ newarea .setGeometry (area .geometry ())
80+ attrs = area .attributes ()
81+ attrs .append (regions [area .id ()])
82+ newarea .setAttributes (attrs )
83+ newlayer .addFeature (newarea )
7284
73- del newlayer
74- outputmsg = self .output_path
75- else :
76- outputmsg = self .ERROR_MSG + str (map (str , islands ))
85+ del newlayer
86+ outputmsg = self .output_path
87+ else :
88+ outputmsg = self .ERROR_MSG + str (map (str , islands ))
7789 self .progress .emit (100.0 )
7890 self .finished .emit (valid , outputmsg )
0 commit comments