<div dir="ltr">Sperando di essere ancora in tempo, ti parlo della mia idea.<br>Premetto di non avere capito del tutto come siano strutturati i tuoi dati, per cui la soluzione che ti propongo potrebbe essere leggermente modificata in funzione di come essi siano presentati.<br>Ho creato questa situazione, sperando che sia rappresentativa del tuo caso:<br><br><img src="cid:ii_iv879owd0_1583f52e5b5e5a30" width="361" height="304"><br><img src="cid:ii_iv879zeq1_1583f531bd7dd890" width="216" height="232"><br>​<br><br>Lo script che ti incollo nel seguito esegue queste operazioni:<br>1) cerco le features che hanno, tra gli attributi, un determinato valore ( o "rapporto", come lo chiami tu);<br>2) salvo queste features in un dizionario;<br>3) estrapolo dalla colonna del rapporto (in questo caso, quella con indice [1]) i valori numerici che fanno riferimento alle geometrie da confrontare;<br>4) verifico che la feature in esame intersechi le altre features di confronto;<br>5) stampo in ordine: il codice della feature, il rapporto dichiarato, la veridicità di quanto riportato nel rapporto (VERO o FALSO).<br><br>Per questo esempio, lo script stampa a video il risultato:<br>Feature No. 3, 3 copre 2, FALSO<br>Feature No. 5, 5 copre 3 e 4, VERO<br>Feature No. 4, 4 copre 5, VERO<br>Feature No. 6, 6 coperto da 7, VERO<br>Feature No. 7, 7 copre 6, VERO<br><br>Come puoi notare, ho scritto volutamente un rapporto sbagliato per la feature 3 ("3 copre 2") per validare lo script.<br><br>Sperando di non essere andato troppo fuori strada (o di aver commesso altri errori formali), ti incollo il codice che ho utilizzato io, ciao!<br><br>Marco<br><br>###########################<br><br># se vuoi verificare l'intersezione, 'copre' e 'coperto' significano la stessa cosa<br>test_string1 = 'copre'<br>test_string2 = 'coperto'<br><br># Crea un dizionario con tutte le features che soddisfano il test<br>allfeatures={}<br>for item in vlayer.getFeatures():<br>    if test_string1 in item[1] or test_string2 in item[1]:<br>        allfeatures[<a href="http://item.id">item.id</a>()] = QgsFeature(item)<br><br># cerca se quello riportato nel rapporto è VERO o FALSO<br>for feat1 in allfeatures.values():<br>    feat = 'Feature No. %s,' %(feat1[0])<br>    intersect=[]<br>    string = '%s %s,' %(feat1[0], feat1[1])<br>    inGeom1 = feat1.geometry()<br>    test = feat1[1]<br>    numb_test1=[int(s) for s in test.split() if s.isdigit()]<br>    str1 = ','.join(str(e) for e in numb_test1)<br>    for feat2 in vlayer.getFeatures():<br>        if feat2 != feat1:<br>            inGeom2 = feat2.geometry()<br>            if inGeom1.intersects(inGeom2):<br>                intersect.append(feat2[0])<br>            for l in numb_test1:<br>                if l in intersect:<br>                    check = 'VERO'<br>                else:<br>                    check = 'FALSO'<br>    print feat, string, check</div><div class="gmail_extra"><br><div class="gmail_quote">Il giorno 6 novembre 2016 15:06, Giuliano Curti <span dir="ltr"><<a href="mailto:giulianc51@gmail.com" target="_blank">giulianc51@gmail.com</a>></span> ha scritto:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On 11/6/16, Luca Mandolesi <<a href="mailto:mandoluca@gmail.com">mandoluca@gmail.com</a>> wrote:<br>
> Il giorno 6 novembre 2016 13:33, Giuliano Curti <<a href="mailto:giulianc51@gmail.com">giulianc51@gmail.com</a>> ha<br>
> scritto:<br>
><br>
>> On 11/6/16, Luca Mandolesi <<a href="mailto:mandoluca@gmail.com">mandoluca@gmail.com</a>> wrote:<br>
><br>
</span><span class="">> mentre sono in un ciclo for e analizzo il campo di un record, come faccio a<br>
> chiamare un altro record e caricarne la geometria.<br>
<br>
</span>rimango sempre nel dubbio di aver capito bene :-) questo spezzone di<br>
codice cmq ti dà le due feature f1 e f2, le rispettive geometrie, le<br>
confronta (scartando ovviamente il controllo<br>
con sè stessa) e puoi accedere ad ogni altro loro attributo;<br>
<br>
        for f1 in layer.getFeatures():<br>
                ......<br>
                for f2 in layer.getFeatures():<br>
                        ........<br>
                        if <a href="http://f2.id" rel="noreferrer" target="_blank">f2.id</a>() <> <a href="http://f1.id" rel="noreferrer" target="_blank">f1.id</a>():<br>
                                .........<br>
                                if f1.geometry().intersects(f2.<wbr>geometry()):<br>
                                        (controllo se l'attributo delle due feature è corretto)<br>
                                        .......<br>
<br>
NB: per il tuo caso forse è ridondante perchè confronta A con B e B<br>
con A, mentre a te potrebbe bastare confrontare A con B, ad es.<br>
modificando il test in<br>
                        if <a href="http://f2.id" rel="noreferrer" target="_blank">f2.id</a>() > <a href="http://f1.id" rel="noreferrer" target="_blank">f1.id</a>():<br>
o qualche modo migliore che sapranno indicarti altri;<br>
<br>
> Ciao<br>
> Luca<br>
<div class="HOEnZb"><div class="h5"><br>
ciao,<br>
giuliano<br>
______________________________<wbr>_________________<br>
QGIS-it-user mailing list<br>
<a href="mailto:QGIS-it-user@lists.osgeo.org">QGIS-it-user@lists.osgeo.org</a><br>
<a href="http://lists.osgeo.org/mailman/listinfo/qgis-it-user" rel="noreferrer" target="_blank">http://lists.osgeo.org/<wbr>mailman/listinfo/qgis-it-user</a><br>
</div></div></blockquote></div><br></div>