Re: [QGIS-it-user] Primi 3 elementi maggior per ogni gruppo in SpatiaLite/QGIS

2017-02-10 Per discussione Giulio Fattori

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

#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___
QGIS-it-user mailing list
QGIS-it-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/qgis-it-user


Re: [QGIS-it-user] Primi 3 elementi maggior per ogni gruppo in SpatiaLite/QGIS

2017-02-09 Per discussione matteo
Ciao Giulio,

sarei curioso di vedere lo script python che hai fatto e di come hai
usato una funzione di aggregazione

Grazie mille!

Matteo
___
QGIS-it-user mailing list
QGIS-it-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/qgis-it-user


Re: [QGIS-it-user] Primi 3 elementi maggior per ogni gruppo in SpatiaLite/QGIS

2017-02-08 Per discussione Giulio Fattori

Il 08/02/2017 15:28, matteo ha scritto:

Forse ho una soluzione migliore anche se comunque un po' "manuale"..

1. prima query sql in cui etraggo le prime vette dallo shape
2. faccio una "Selezione per posizione" in modo da avere le vette più
alte **selezionate** nel layer con tutte le vette
3. aggiungo una colonna e aggiungo valori = 0 per tutti le vette e
valore = 1 per le vette più alte
4. altra query sql in cui escludo le vette che hanno valore = 1

select geom, id, name, max(ele), valore from peaks
where valore != 0
group by id

5. ripeto il pricedimento 2 e 3, ma al punto 3 per le "seconde" vette
maggiori attribuisco un valore = 2

6. altra query sql in cui escludo sia il valore = 1 che valore = 3


funziona ;)
___
QGIS-it-user mailing list
QGIS-it-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/qgis-it-user


Salve, ho realizzato uno script in pyqgis che farebbe al caso tuo, 
svolge il compito in una sola passata,


dopodichè hai un campo con gli ordinali della tua selezione su cui fare 
il filtro.


Potresti farmi avere il tuo layer cosi che possa testarlo e passartelo 
oppure se preferisci lo adatti direttamente tu


Saluti

___
QGIS-it-user mailing list
QGIS-it-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/qgis-it-user


Re: [QGIS-it-user] Primi 3 elementi maggior per ogni gruppo in SpatiaLite/QGIS

2017-02-08 Per discussione G. Allegri
Con Postgis la cosa sarebbe semplice grazie alle funzioni finestra:
https://www.postgresql.org/docs/9.3/static/functions-window.html

giovanni

Il 8 feb 2017 15:28, "matteo"  ha scritto:

> Forse ho una soluzione migliore anche se comunque un po' "manuale"..
>
> 1. prima query sql in cui etraggo le prime vette dallo shape
> 2. faccio una "Selezione per posizione" in modo da avere le vette più
> alte **selezionate** nel layer con tutte le vette
> 3. aggiungo una colonna e aggiungo valori = 0 per tutti le vette e
> valore = 1 per le vette più alte
> 4. altra query sql in cui escludo le vette che hanno valore = 1
>
> select geom, id, name, max(ele), valore from peaks
> where valore != 0
> group by id
>
> 5. ripeto il pricedimento 2 e 3, ma al punto 3 per le "seconde" vette
> maggiori attribuisco un valore = 2
>
> 6. altra query sql in cui escludo sia il valore = 1 che valore = 3
>
>
> funziona ;)
> ___
> QGIS-it-user mailing list
> QGIS-it-user@lists.osgeo.org
> https://lists.osgeo.org/mailman/listinfo/qgis-it-user
>
___
QGIS-it-user mailing list
QGIS-it-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/qgis-it-user


Re: [QGIS-it-user] Primi 3 elementi maggior per ogni gruppo in SpatiaLite/QGIS

2017-02-08 Per discussione matteo
Forse ho una soluzione migliore anche se comunque un po' "manuale"..

1. prima query sql in cui etraggo le prime vette dallo shape
2. faccio una "Selezione per posizione" in modo da avere le vette più
alte **selezionate** nel layer con tutte le vette
3. aggiungo una colonna e aggiungo valori = 0 per tutti le vette e
valore = 1 per le vette più alte
4. altra query sql in cui escludo le vette che hanno valore = 1

select geom, id, name, max(ele), valore from peaks
where valore != 0
group by id

5. ripeto il pricedimento 2 e 3, ma al punto 3 per le "seconde" vette
maggiori attribuisco un valore = 2

6. altra query sql in cui escludo sia il valore = 1 che valore = 3


funziona ;)
___
QGIS-it-user mailing list
QGIS-it-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/qgis-it-user


Re: [QGIS-it-user] Primi 3 elementi maggior per ogni gruppo in SpatiaLite/QGIS

2017-02-02 Per discussione matteo
Caro Giulinao (e tutti),

ho risolto artigianalmente (a volte sono le soluzioni migliori però)..

1. lanciare la query sul mio layer in modo che trovi i 3 elementi
maggiori (sono picchi montuosi) per ogni gruppo
2. carico come nuovo layer e faccio una bella "seleziona per posizione"
dove seleziono in input il layer con tutti i punti che è UGUALE al layer
caricato
3. inverto la selezione (cosi ho tutti i picchi meno i 3 maggiori per
ogni gruppo) e ricarico solo la selezione in SL
4. rilancio la query sul layer caricato e ottengo i, diciamo, secondi 3
picchi maggiori..

ripeto la procedura dove aggiungo alla selezione entrambi i layer dei
picchi..


artigianale e brutto lo so, ma funzionale...


Grazie a tutti e ovviamente, se qualcuno ha un'idea migliore e meno
artigianale sono tutto orecchi

Saluti

Matteo
___
QGIS-it-user mailing list
QGIS-it-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/qgis-it-user


Re: [QGIS-it-user] Primi 3 elementi maggior per ogni gruppo in SpatiaLite/QGIS

2017-02-01 Per discussione Giuliano Curti
On 2/1/17, matteo  wrote:
> Ciao a tutti,

ciao Matteo,


> ho un problemino che pensavo fosse semplice e invece mi sta facendo
> diventare matto.
>
> Ho un layer in QGIS (caricato anche in un DB SL) dove ho una colonna
> numerica e un'altra colonna con un id (diciamo di aggregazione).
>
> Sto inutilmente cercando di estrarre i primi 3 valori maggiori della
> colonna numerica per ogni id, ovvero trasformare questa semplice query:
>...
> Qualche spunto?

per il prelievo dei primi 3 elementi proverei a:
- generare una vista ottenuta da un SELECT * FROM  ORDER BY ele
- aggiungerei un campo 'ord' (durante la creazione o a posteriori)
autoincrementale (mi sembra si possa anche se non ne ho esperienza
diretta :-) o più semplicemente si può forse utilizzare ROWID
- estrarrei dalla vista i primi 3 elementi con SELETC * FROM 
WHERE ord < 4 (o ROWID < 4);

per confinare la ricerca in ogni categoria metterei una clausola WHERE
id = categoria_voluta nella prima query e ripeterei il metodo detto
sopra per ogni categoria (penso che si possa anche automatizzare il
tutto con istruzioni nidificate, ma.

prima di smadonnare ricorda che il suggerimento arriva da uno
abbastanza profano di SQL da essere perdonato per le eventuali
castronerie (ma abbastanza interessato di conoscere la soluzione
migliore che spero posterai);

> Grazie a tutti
>
> Matteo

ciao,
giuliano
___
QGIS-it-user mailing list
QGIS-it-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/qgis-it-user


Re: [QGIS-it-user] Primi 3 elementi maggior per ogni gruppo in SpatiaLite/QGIS

2017-02-01 Per discussione matteo
Ciao Carlo,

ci ho provato, ma credo che l'inghippo qui sia nella clausola group by.

Se ordino e limito gli elementi, quello che ottengo non sono i 3
elementi maggiori per ogni gruppo, ma i 3 elementi maggiori per tutto il
layer

sbaglio?

grazie

Matteo
___
QGIS-it-user mailing list
QGIS-it-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/qgis-it-user


Re: [QGIS-it-user] Primi 3 elementi maggior per ogni gruppo in SpatiaLite/QGIS

2017-02-01 Per discussione Carlo Alberto Nicolini
Scusa… per come la vedo… potresti fare la query ed ordinarla partendo dai 
valori più alti, limitando la ricerca a tre elementi

Ciao..
Carlo
> Il giorno 01 feb 2017, alle ore 16:12, qgis-it-user-requ...@lists.osgeo.org 
> ha scritto:
> 
> Sto inutilmente cercando di estrarre i primi 3 valori maggiori della
> colonna numerica per ogni id, ovvero trasformare questa semplice query:
> 
> select geom, max(ele), id from layerA
> group by id
> 
> espandendo nl'elemento maggiore per ogni ai primi 3 elementi maggiori

___
QGIS-it-user mailing list
QGIS-it-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/qgis-it-user


Re: [QGIS-it-user] Primi 3 elementi maggior per ogni gruppo in SpatiaLite/QGIS

2017-02-01 Per discussione matteo
Ciao Sergio,


> il problema non è per nulla banale da fare con l'SQL (magari sapendo un
> minimo programmare lo diventa).

infatti sto pensado di passare a python e vedere cosa succede

non ho postgres installato sul mio pc, cerco di tradurre per SL

Grazie!

Matteo
___
QGIS-it-user mailing list
QGIS-it-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/qgis-it-user


[QGIS-it-user] Primi 3 elementi maggior per ogni gruppo in SpatiaLite/QGIS

2017-02-01 Per discussione matteo
Ciao a tutti,

ho un problemino che pensavo fosse semplice e invece mi sta facendo
diventare matto.

Ho un layer in QGIS (caricato anche in un DB SL) dove ho una colonna
numerica e un'altra colonna con un id (diciamo di aggregazione).

Sto inutilmente cercando di estrarre i primi 3 valori maggiori della
colonna numerica per ogni id, ovvero trasformare questa semplice query:

select geom, max(ele), id from layerA
group by id

espandendo nl'elemento maggiore per ogni ai primi 3 elementi maggiori

Qualche spunto?

Grazie a tutti

Matteo
___
QGIS-it-user mailing list
QGIS-it-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/qgis-it-user