Creare moduli con filtro dinamico (anche multi-selezione)

Una delle novità introdotte nella QGIS 3.2 è la Form drill-down (a cascata) WIDGET Value Relation (Relazione valore) che permette di creare delle Form con filtro dinamico, in questo esercizio vedremo come realizzare una Form semplice e una multiselezione.

../_images/img_00.png

../_images/img_03.png

Form semplice selezione 1:1

../_images/img_06.png

../_images/img_07.png

  • espressione da usare:
"cod_prov" = current_value('provincia')

../_images/drill3.gif

Form avanzato n:m

../_images/img_04.png

../_images/img_05.png

  • espressione da usare:
eval( ' "cod_prov" in' || replace(current_value('provincia'),array('{','}', '"'),array('(',')', '\'')))

Espressione di Pedro Venâncio con suggerimento di Alexandre Neto - Lista QGIS dev

../_images/drill2.gif

Form avanzato con spatial join 1:m

../_images/img_012.png

  • espressione da scrivere in Espressione filtro nel primo campo della form:
aggregate( 
layer:='province_siciliane', 
aggregate:='concatenate', 
expression:= "DEN_PCM", 
filter:= intersects(@current_geometry, geometry(@parent) )
) 

o più semplicemente (e anche più performante)

intersects( @current_geometry ,$geometry)
  • Nel caso volessimo filtrare la feature più vicina (quindi non necessariamnete intersecante):
minimum(distance(@current_geometry ,$geometry)) = distance(@current_geometry ,$geometry)

../_images/drill4.gif

../_images/img_022.png

  • espressione da scrivere in Espressione filtro nel secondo campo della form:
eval( ' "cod_prov" in' || replace(current_value('provincia'),array('{','}', '"'),array('(',')', '\'')))

Espressione di Pedro Venâncio con suggerimento di Alexandre Neto - Lista QGIS dev

../_images/drill1.gif

funzione aggregate

Prova tu

Geopackage con dati e progetto

Nel GeoPackage sono state memorizzate i tre stili usati per il form!!!

Riferimenti

Lista QGIS dev

Issue: https://github.com/qgis/QGIS/issues/33046