ID univoco per gruppi consecutivi↵
L'esempio è preso da qui:
stackexchange: https://gis.stackexchange.com/questions/418137/adding-unique-id-for-consecutive-groups-using-field-calculator-in-qgis
ovvero, come creare un campo group1
che contenga ID
univoco per gruppi consecutivi (vedi immagine e numeri in bianco)
with_variable('cucu',
aggregate(
layer:=@layer_name,
aggregate:='array_agg',
expression:= (array_find(array_agg("ID", "PortCluster_ID"),"ID"))-"ID"),
with_variable('cucu2',
(array_find(array_agg("ID", "PortCluster_ID"),"ID"))-"ID",
array_find(array_distinct(@cucu),@cucu2)+1))
risultato:
In linguaggio umano:
- Primo passo, creare un campo
temp1
e popolarlo conarray_agg("ID", "PortCluster_ID")
, ovvero, aggrego tutti gliID
ragguppandoli perPortCluster_ID
(per poterlo visualizzare devo usare anche la funzionearray_to_string
, quindi:array_to_string(array_agg("ID", "PortCluster_ID"))
); - secondo passo, creo un campo
temp2
e lo popolo con l'indice che possiede il valore del campoID
dentro l'array calcolato nel campotemp1
usando l'espressionearray_find(array_agg("ID", "PortCluster_ID"),"ID"))
; - terzo passo, faccio la differenza tra il campo
temp2
e il campoID
; - quarto passo, creo un array del campo
temp3
usando la funzioneaggregate
(variabilecucu
); - quinto passo, creo un campo
temp4
e lo popolo con l'indice che i valori del campotemp3
hanno nell'array creato nel quarto passo; - infine, mettendo tutto assieme viene fuori l'espressione utilizzata che in un unico passaggio popola il campo
group1
.
prova tu↵
Funzioni e variabili utilizzate: