[QGIS-it-user] pyQgis: come verificare una gemetria id=X nel corso di un ciclo?

Luca Mandolesi mandoluca a gmail.com
Dom 6 Nov 2016 03:01:25 PST


Ciao Marco.
per ora devo solo mandare fuori l'id delle 2 geometrie e la verifica della
presenza di intersezione. Dal cookbook si arriva bene qua:

iter = vlayer.getFeatures()

Faccio un loop sulle singole geometrie e se becco il rapporto copre
 ricavare da iter la feature id=x senza fare un loop.

Tipo con una chiamata:
#singFeat = vlayer.featureAtId(1)

Ma mi dice che vlayer non ha featureAtId come metodo
E' possibile?

Grazie
Luca

#############################
Dilungandosi nei particolari....

Il loop è eseguito su un tabella view che fonde la tabella spaziale con la
tabella alfanumerica.

Quindi se nel campo rapporto c'è scritto 1 copre 2, devo chiamare le
geometrie di 1 e 2 e fare un verifica l'intersezione.

Facendo un loop sulla view accedo al campo rapporti, quando si verifica la
condizione "copre" (e fin qui ci sono come script python) allora nel loop
dal provider devo ricavare la geometria ed è qui che non capisco come
accedere dal provider al dato geometry.

uri = QgsDataSourceURI()
uri.setDatabase('C:\\Users\\Luca\\pyarchinit_DB_folder\\pyarchinit_db.sqlite')
uri.setDataSource('','pyarchinit_us_view', 'the_geom')

provider = vlayer.dataProvider()
iter = vlayer.getFeatures()

vlayer = QgsVectorLayer(uri.uri(), 'pyarchinit_us_view', 'spatialite')

for feature in iter:
        for sing_us in feature[31]: #il 31 è il campo che contiene il
rapporto in formato lista ['copre', '2']
            #a questo punto avrei bisogno di dire
            a = feature
            b = iter.(cerca la feature id=2).feature() #<- qui c'è il punto
in cui non riesco a recuperare la geometria della feature senza fare un iter
            return sing_us, a.geometry().intersects(b.geometry())


Alla fine otterrei un valore di rapporto copre e un false o true per
l'intersezione che andrò a gestire in una tabella esterna dove visualizzo
il rapporto alfanumerico richiesto e farò apparire le 2 geometrie in ballo.
Sarà poi l'utente a decidere se è il disegno sbagliato oppure il dato
alfanumerico inserito ad essere errato.





Il giorno 5 novembre 2016 17:11, Marco Grisolia <marco.grisolia5 a gmail.com>
ha scritto:

> Ciao,
> non ho capito se vuoi sapere soltanto quali siano le features che si
> intersecano tra loro (ad es. una lista) oppure se devi fare un ulteriore
> controllo su di esse una volta verificata l'intersezione (ad esempio: se la
> feature "a" interseca altre 3 features all'interno del layer, verificare
> che a["id_us"] sia pari a 3).
> A prescindere dall'obiettivo, vuoi solo stampare qualcosa o modificare gli
> attributi?
> Marco
>
> Il giorno 5 novembre 2016 09:53, Luca Mandolesi <mandoluca a gmail.com> ha
> scritto:
>
>> Scusate, partito l'invio, il print di prima era un errore.
>>
>> Io pensavo ad una cosa tipo [0], ma ricevo poi errore perchè a e b non
>> accedono a geometry:
>>
>> [0]
>> request = QgsFeatureRequest().setFilterExpression( '"id_us" = 2' )
>> a = vlayer.getFeatures( request )
>> request = QgsFeatureRequest().setFilterExpression( '"id_us" = 3' )
>> b = vlayer.getFeatures( request )
>>
>> a.geometry().intersects(b.geometry())
>>
>> Grazie per i suggerimenti.
>> Luca
>>
>> _______________________________________________
>> QGIS-it-user mailing list
>> QGIS-it-user a lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/qgis-it-user
>>
>>
>
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.osgeo.org/pipermail/qgis-it-user/attachments/20161106/53517aaf/attachment.html>


Maggiori informazioni sulla lista QGIS-it-user