|
32 | 32 | QgsFeature, |
33 | 33 | QgsField, |
34 | 34 | QgsExpression, |
| 35 | + QgsRuleBasedRenderer, |
| 36 | + QgsFillSymbol, |
35 | 37 | ) |
36 | 38 | from qgis.gui import QgsMapTool, QgsRubberBand |
37 | 39 | from qgis.PyQt.QtCore import Qt, QVariant, QTimer, QSettings |
@@ -104,6 +106,53 @@ def _is_point_layer(layer): |
104 | 106 | return layer.geometryType() == 0 |
105 | 107 |
|
106 | 108 |
|
| 109 | +def _applica_stile_particelle(layer): |
| 110 | + """Applica stile rule-based al layer particelle in base al campo LABEL. |
| 111 | +
|
| 112 | + - Particelle numeriche → arancione |
| 113 | + - STRADA → grigio |
| 114 | + - ACQUA → blu |
| 115 | + """ |
| 116 | + # Simbolo base (serve come root per il renderer) |
| 117 | + root_rule = QgsRuleBasedRenderer.Rule(None) |
| 118 | + |
| 119 | + # Regola STRADA → grigio |
| 120 | + sym_strada = QgsFillSymbol.createSimple({ |
| 121 | + "color": "153,153,153,255", |
| 122 | + "outline_color": "102,102,102,255", |
| 123 | + "outline_width": "0.3", |
| 124 | + }) |
| 125 | + rule_strada = QgsRuleBasedRenderer.Rule(sym_strada) |
| 126 | + rule_strada.setLabel("Strada") |
| 127 | + rule_strada.setFilterExpression('"LABEL" LIKE \'%STRADA%\'') |
| 128 | + root_rule.appendChild(rule_strada) |
| 129 | + |
| 130 | + # Regola ACQUA → blu |
| 131 | + sym_acqua = QgsFillSymbol.createSimple({ |
| 132 | + "color": "74,144,217,255", |
| 133 | + "outline_color": "44,95,138,255", |
| 134 | + "outline_width": "0.3", |
| 135 | + }) |
| 136 | + rule_acqua = QgsRuleBasedRenderer.Rule(sym_acqua) |
| 137 | + rule_acqua.setLabel("Acqua") |
| 138 | + rule_acqua.setFilterExpression('"LABEL" LIKE \'%ACQUA%\'') |
| 139 | + root_rule.appendChild(rule_acqua) |
| 140 | + |
| 141 | + # Regola ELSE (particelle numeriche) → arancione |
| 142 | + sym_particella = QgsFillSymbol.createSimple({ |
| 143 | + "color": "255,140,0,255", |
| 144 | + "outline_color": "204,112,0,255", |
| 145 | + "outline_width": "0.3", |
| 146 | + }) |
| 147 | + rule_particella = QgsRuleBasedRenderer.Rule(sym_particella) |
| 148 | + rule_particella.setLabel("Particella") |
| 149 | + rule_particella.setIsElse(True) |
| 150 | + root_rule.appendChild(rule_particella) |
| 151 | + |
| 152 | + renderer = QgsRuleBasedRenderer(root_rule) |
| 153 | + layer.setRenderer(renderer) |
| 154 | + |
| 155 | + |
107 | 156 | # Qt enum scoped (Qt6) vs flat (Qt5) |
108 | 157 | try: |
109 | 158 | _WindowModal = Qt.WindowModality.WindowModal |
@@ -794,8 +843,15 @@ def esegui_download_e_caricamento(min_lat, min_lon, max_lat, max_lon, filter_geo |
794 | 843 | mem_provider.addFeatures(new_features) |
795 | 844 | mem_layer.updateExtents() |
796 | 845 |
|
| 846 | + # Applica stile rule-based (arancione/grigio/blu) |
| 847 | + _applica_stile_particelle(mem_layer) |
| 848 | + |
797 | 849 | # Aggiungi al progetto |
798 | 850 | QgsProject.instance().addMapLayer(mem_layer) |
| 851 | + # Mostra conteggio feature per categoria in legenda |
| 852 | + tree_layer = QgsProject.instance().layerTreeRoot().findLayer(mem_layer.id()) |
| 853 | + if tree_layer: |
| 854 | + tree_layer.setCustomProperty("showFeatureCount", True) |
799 | 855 | feat_count = mem_layer.featureCount() |
800 | 856 |
|
801 | 857 | print(f"[OK] Layer temporaneo caricato con {feat_count} feature(s)") |
|
0 commit comments