[QGIS-it-user] Primi 3 elementi maggior per ogni gruppo in SpatiaLite/QGIS
Giulio Fattori
giulio.fattori a tin.it
Ven 10 Feb 2017 01:10:22 PST
Il 09/02/2017 15:42, matteo ha scritto:
> Ciao Giulio,
>
> sarei curioso di vedere lo script python che hai fatto e di come hai
> usato una funzione di aggregazione
>
> Grazie mille!
>
> Matteo
>
In allegato il file da caricare nella console python, spero di essere
stato abbastanza chiaro nei commenti per l'utilizzo
Saluti
-------------- parte successiva --------------
#Giulio Fattori 07.02.2017 - Numeratore progressiva per raggruppamento
#LO SCRIPT FUNZIONA SUL LAYER CORRENTE - LAVORARE SEMPRE SU COPIA
#Il layer deve essere preventivamente riordinato secondo i campi voluti
#sino a 3 campi si puo utilizzare il plugin SORT AND NUMBER se usato questo automaticamente
#inserisce un campo ''order' che va inserito al posto di Pos
#occorre poi salvare l'ordinamento ottenuto, per questo usare MMQGIS SORT impostando ''order'
#come campo di ordinamento, lo script proddurrĂ il layer su cui lavorare "tempn.shp"
#il nome del CAMPO di raggruppamento/conteggio deve essere sostituito a 'C' nel codice
#Inserire nel layer un campo numerico 'Pos' dove verra memorizzata la numerazione
#assegnare a C il nome campo da considerare per il raggruppamento e la numerazione
C='FOGLIO'
#assegnare a i L il nome campo valore di controllo per la stampa in console
L='order'
#assegnare a Pos il nome del campo in cui memorizzare la numerazione
#che può essere un campo esistente o aggiunto
#ricordando che deve essere numerico altrimenti il filtro non funziona
Pos='SVILUPPO'
#CANCELLIAMO LA CONSOLE
from PyQt4.QtGui import QDockWidget
consoleWidget = iface.mainWindow().findChild( QDockWidget, 'PythonConsole' )
consoleWidget.console.shellOut.clearConsole()
#otteniamo il riferimento al layer corrente
layer = qgis.utils.iface.activeLayer()
#contiamo le feature presenti
count = layer.featureCount()
#recupero il numero del nuovo campo indice nella tabella dati
col=layer.fieldNameIndex(Pos)
print 'Start Elaborazione'
layer.startEditing()
#otteniamo il riferimento al layer
feat = [feature for feature in layer.getFeatures()]
#inizializzo cursore feature
i=0
#inizializzo contatore di sequenza
k=1
#assegno 1 al primo elemento
feat[i][Pos]=k
#salvo posizione
layer.changeAttributeValue(i, col,k)
#ciclo fino alla penultima feature
while i<count-1:
#confronto il corrente con il seguente
if feat[i][C]==feat[i+1][C]:
#se sono uguali incremento contatore
k=k+1
else:
#se son diversi riporto contatore a 1
k=1
#scrivo nel campo di sottordinamento il valore del contatore
feat[i+1][Pos]=k
#aggiorno la feature
layer.changeAttributeValue(i+1, col, k)
#stampo per controllo
print i,feat[i][C],feat[i][L],feat[i][Pos]
#passo alla feature successiva
i=i+1
# stampo ultimo campo
print i,feat[i][C],feat[i][L],feat[i][Pos]
#salvo modifiche
layer.commitChanges()
print 'End Elaborazione'
Maggiori informazioni sulla lista
QGIS-it-user