Skip to content

Commit

Permalink
#90 evaluation field and score added to predictions in UI
Browse files Browse the repository at this point in the history
  • Loading branch information
dieuska committed Jan 14, 2025
1 parent 105a278 commit e1ad101
Show file tree
Hide file tree
Showing 4 changed files with 102 additions and 46 deletions.
85 changes: 59 additions & 26 deletions plugin/brdrq/brdrq.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
import numpy as np
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QAction, QListWidgetItem
from brdr.constants import PREDICTION_SCORE, EVALUATION_FIELD_NAME
from qgis import processing
from qgis.PyQt.QtCore import QCoreApplication
from qgis.PyQt.QtCore import Qt
Expand Down Expand Up @@ -74,6 +75,7 @@
from brdr.grb import GRBActualLoader, GRBFiscalParcelLoader
from brdr.enums import GRBType, AlignerResultType, OpenbaarDomeinStrategy, SnapStrategy
from brdr.loader import DictLoader
from brdr.utils import diffs_from_dict_processresults


class BrdrQPlugin(object):
Expand All @@ -98,8 +100,9 @@ def __init__(self, iface):
self.layer = None
self.selected_features = None
self.feature = None
self.dict_series = None
self.dict_predictions = None
self.dict_processresults = None
self.dict_evaluated_predictions = None
self.props_dict_evaluated_predictions = None
self.diffs_dict = None
self.aligner = None
self.od_strategy = None
Expand Down Expand Up @@ -299,7 +302,7 @@ def _update_settings(self):
self.settingsDialog.mFieldComboBox_reference.currentField()
)
if self.full_parcel is None:
self.full_parcel = int(s.value("brdrq/full_parcel", 0))
self.full_parcel = int(s.value("brdrq/full_parcel", 2))
self.settingsDialog.checkBox_full_parcel.setCheckState(self.full_parcel)
self.full_parcel = (
self.settingsDialog.checkBox_full_parcel.checkState()
Expand Down Expand Up @@ -329,7 +332,7 @@ def _update_settings(self):
print(
f"settings updated: Reference choice={self.reference_choice} - od_strategy={self.od_strategy} - threshold overlap percenatge = {str(self.threshold_overlap_percentage)}"
)

self.partial_snapping = False
self.aligner = None
self.aligner = Aligner(
od_strategy=self.od_strategy,
Expand Down Expand Up @@ -587,14 +590,28 @@ def _onFeatureChange(self, currentItem):

# set list with predicted values
self.dockwidget.listWidget_predictions.clear()
items = [str(k) for k in self.dict_predictions[key]]
self.dockwidget.listWidget_predictions.addItems(items)
if len(items) > 1:
self.dockwidget.listWidget_predictions.setCurrentRow(1)
self.dockwidget.doubleSpinBox.setValue(round(float(items[1]), 1))
elif len(items) > 0:
self.dockwidget.listWidget_predictions.setCurrentRow(0)
self.dockwidget.doubleSpinBox.setValue(round(float(items[0]), 1))
#TODO, loop over predictions en voeg toe met boodschap
items =[]
items_with_name = []
best_index = 0
best_score = 0
list_predictions = [k for k in (self.dict_evaluated_predictions[key]).keys()]
print (str(list_predictions))
for k in list_predictions:
print(str(k))
items.append(str(k))
score = self.props_dict_evaluated_predictions[key][k][PREDICTION_SCORE]
evaluation = self.props_dict_evaluated_predictions[key][k][EVALUATION_FIELD_NAME]
items_with_name.append( f"{str(k)}: {str(evaluation)} (score: {str(score)})" )
if score > best_score:
best_score = score
best_index = list_predictions.index(k)
print ("best index: " + str(best_index))
self.dockwidget.listWidget_predictions.setFocus()
self.dockwidget.listWidget_predictions.addItems(items_with_name)
if len(items) > 0:
self.dockwidget.listWidget_predictions.setCurrentRow(best_index)
self.dockwidget.doubleSpinBox.setValue(round(float(items[best_index]), 1))
else:
self.dockwidget.textEdit_output.setText("No predictions")

Expand All @@ -608,7 +625,9 @@ def _listItemActivated(self, currentItem):
print("currentitem zero")
return
print("item activated with rd: " + currentItem.text())
value = round(float(currentItem.text()), 1)
value = currentItem.text()
value = value.split(":")[0]
value = round(float(value), 1)
print("item activated with rd - value: " + str(value))
self.dockwidget.doubleSpinBox.setValue(value)
index = self.relevant_distances.index(value)
Expand Down Expand Up @@ -654,6 +673,7 @@ def get_graphic(self):
if feat is None:
return
key = feat.id()
#TODO; hoe deze bekomen?
plot_series(self.relevant_distances, {key: self.diffs_dict[key]})
return

Expand All @@ -664,7 +684,7 @@ def get_visualisation(self):
return
key = feat.id()
show_map(
{key: self.dict_predictions[key]},
{key: self.dict_evaluated_predictions[key]},
{key: self.aligner.dict_thematic[key]},
self.aligner.dict_reference,
)
Expand All @@ -677,8 +697,8 @@ def change_geometry(self):
return
key = feat.id()
relevant_distance = self.dockwidget.doubleSpinBox.value()
if relevant_distance in self.dict_series[key]:
result = self.dict_series[key][relevant_distance]
if relevant_distance in self.dict_processresults[key]:
result = self.dict_processresults[key][relevant_distance]
resulting_geom = result["result"]
else:
errormesssage = "Relevant_distance_result not calculated for: " + str(
Expand Down Expand Up @@ -714,8 +734,8 @@ def get_wkt(self):
return
key = feat.id()
relevant_distance = self.dockwidget.doubleSpinBox.value()
if relevant_distance in self.dict_series[key]:
result = self.dict_series[key][relevant_distance]
if relevant_distance in self.dict_processresults[key]:
result = self.dict_processresults[key][relevant_distance]
resulting_geom = result["result"]
else:
errormesssage = "Relevant_distance_result not calculated for: " + str(
Expand Down Expand Up @@ -791,20 +811,33 @@ def _align(self):
self.aligner.dict_reference_source["source"] = "local"
self.aligner.dict_reference_source["version_date"] = "unknown"
self.dockwidget.progressBar.setValue(50)
self.dict_series, self.dict_predictions, self.diffs_dict = (
self.aligner.predictor(
relevant_distances=self.relevant_distances,
od_strategy=self.od_strategy,
threshold_overlap_percentage=self.threshold_overlap_percentage,
)
# self.dict_series, self.dict_predictions, self.diffs_dict = (
# self.aligner.predictor(
# relevant_distances=self.relevant_distances,
# od_strategy=self.od_strategy,
# threshold_overlap_percentage=self.threshold_overlap_percentage,
# )
# )
dict_evaluated, props_dict_evaluated_predictions = self.aligner.evaluate(
ids_to_evaluate=None,
base_formula_field=None,
all_predictions=True,
relevant_distances=self.relevant_distances,
prefer_full=self.full_parcel,
)

self.dict_processresults = self.aligner.dict_processresults
self.dict_evaluated_predictions=dict_evaluated
self.props_dict_evaluated_predictions=props_dict_evaluated_predictions
self.diffs_dict = diffs_from_dict_processresults(self.dict_processresults,self.aligner.dict_thematic)

outputMessage = "Voorspelde relevante afstanden: " + str(
[str(k) for k in self.dict_predictions[feat.id()].keys()]
[str(k) for k in self.dict_evaluated_predictions[feat.id()].keys()]
)
self.dockwidget.textEdit_output.setText(outputMessage)
self.iface.messageBar().pushMessage(outputMessage)
#self.dockwidget.progressBar.setValue(100)
return self.dict_series, self.dict_predictions, self.diffs_dict
return self.dict_processresults, self.dict_evaluated_predictions, self.diffs_dict

# from qgis.gui import QgsMapToolIdentifyFeature, QgsMapToolIdentify
# from qgis.core import (
Expand Down
6 changes: 5 additions & 1 deletion plugin/brdrq/brdrq_dockwidget.ui
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,11 @@
<widget class="QDoubleSpinBox" name="doubleSpinBox"/>
</item>
<item row="11" column="1">
<widget class="QListWidget" name="listWidget_predictions"/>
<widget class="QListWidget" name="listWidget_predictions">
<property name="editTriggers">
<set>QAbstractItemView::CurrentChanged|QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed|QAbstractItemView::SelectedClicked</set>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QgsMapLayerComboBox" name="mMapLayerComboBox"/>
Expand Down
55 changes: 38 additions & 17 deletions plugin/brdrq/brdrq_settings.ui
Original file line number Diff line number Diff line change
Expand Up @@ -183,23 +183,29 @@
</property>
</widget>
<widget class="QLabel" name="label_7">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>10</x>
<y>360</y>
<x>20</x>
<y>390</y>
<width>191</width>
<height>16</height>
<height>31</height>
</rect>
</property>
<property name="text">
<string>Partiële snapping?</string>
<string>Partiële snapping? (not used)</string>
</property>
</widget>
<widget class="QLabel" name="label_8">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>10</x>
<y>400</y>
<x>20</x>
<y>440</y>
<width>191</width>
<height>16</height>
</rect>
Expand All @@ -209,10 +215,13 @@
</property>
</widget>
<widget class="QLabel" name="label_9">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>10</x>
<y>440</y>
<x>20</x>
<y>480</y>
<width>191</width>
<height>31</height>
</rect>
Expand All @@ -222,10 +231,13 @@
</property>
</widget>
<widget class="QSpinBox" name="spinBox_snap_max_segment_length">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>200</x>
<y>440</y>
<x>210</x>
<y>480</y>
<width>201</width>
<height>22</height>
</rect>
Expand All @@ -241,17 +253,23 @@
</property>
</widget>
<widget class="QCheckBox" name="checkBox_partial_snapping">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>200</x>
<y>360</y>
<x>210</x>
<y>400</y>
<width>81</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string/>
</property>
<property name="checkable">
<bool>false</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
Expand All @@ -260,10 +278,13 @@
</property>
</widget>
<widget class="QComboBox" name="comboBox_snapstrategy">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>200</x>
<y>400</y>
<x>210</x>
<y>440</y>
<width>201</width>
<height>21</height>
</rect>
Expand All @@ -279,13 +300,13 @@
</rect>
</property>
<property name="text">
<string>Alleen full-parcel-results</string>
<string>Prefereer full-parcel-resultaten</string>
</property>
</widget>
<widget class="QCheckBox" name="checkBox_full_parcel">
<property name="geometry">
<rect>
<x>200</x>
<x>220</x>
<y>320</y>
<width>81</width>
<height>20</height>
Expand All @@ -304,7 +325,7 @@
<widget class="QCheckBox" name="checkBox_formula">
<property name="geometry">
<rect>
<x>200</x>
<x>220</x>
<y>280</y>
<width>81</width>
<height>20</height>
Expand Down
2 changes: 0 additions & 2 deletions plugin/brdrq/brdrq_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -183,8 +183,6 @@ def geojson_to_layer(name, geojson, symbol, visible, group, tempfolder):
if tempfolder is None or str(tempfolder) == 'NULL' or str(tempfolder) == "":
tempfolder = "tempfolder"
tempfilename = tempfolder + "/" + name + ".geojson"
print (tempfolder)
print(tempfilename)
write_geojson(tempfilename, geojson_polygon_to_multipolygon(geojson))

vl = QgsVectorLayer(tempfilename, name, "ogr")
Expand Down

0 comments on commit e1ad101

Please sign in to comment.