Ciao Luca, <br><br><div class="gmail_quote">2011/2/24 Luca Mandolesi <span dir="ltr"><<a href="mailto:mandoluca@gmail.com">mandoluca@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<div><span style="font-family: arial,sans-serif; border-collapse: collapse;"><div>qui dovrebbero comparire nella lista legata alla geometria bordata in rosso, solo tre quote, invece le ho richiamate tutte....ovviamente l'errore è in:</div>
<div><br></div><div>lista_quote.append(featPoint.id())</div></span></div></blockquote><div>Non è esattamente quella istruzione il problema. Tuttavia fino a questo momento non avevo <br>capito dalle tue frasi se nella lista c'erano tutti i punti o tutti quelli dentro il bbox anche se <br>
effettivamente stavano fuori.<br><br>Ma a vedere dal codice sotto, il problema è il primo:<br>il dizionario da segno che tutti i poligono contengono tutti i punti... :| <br>Impressionante! :)<br><br>Ecco la soluzione:<br>
<br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div><span style="font-family: arial,sans-serif; border-collapse: collapse;"></span></div>
<div><font color="#888888"><font color="#000000"><font face="arial, sans-serif"><span style="border-collapse: collapse;"><div>import sys</div>
<div>sys.path.insert(0, '/Applications/QGIS.app/Contents/Resources/python/')</div><div>from qgis.core import *</div><div>from qgis.gui import *</div><div><br></div><div># supply path to where is your qgis installed</div>
<div>QgsApplication.setPrefixPath("/Applications/QGIS.app/Contents/MacOS/", True)</div><div><br></div><div># load providers</div><div>QgsApplication.initQgis()</div><div><br></div><div>uri = QgsDataSourceURI()</div>
<div># set host name, port, database name, username and password</div><div>uri.setConnection("localhost", "5432", "pyarchinit", "postgres", "mypass")</div><div># set database schema, table name, geometry column and optionaly subset (WHERE clause)</div>
<div>uri.setDataSource("public", "pyunitastratigrafiche", "the_geom", "scavo_s = 'Palazzo Ghetti, Rimini' AND area_s = 1")</div><div>vlPolygons = QgsVectorLayer(uri.uri(), "US", "postgres")</div>
<div>uri.setDataSource("public", "pyarchinit_quote", "the_geom", "sito_q = 'Palazzo Ghetti, Rimini' AND area_q = 1")</div><div>vlPoints = QgsVectorLayer(uri.uri(), "Quote", "postgres")</div>
<div><br></div><div>if vlPolygons.isValid():</div><div> print "Layer polygons loaded!"</div><div><br></div><div>if vlPoints.isValid():</div><div> print "Layer points loaded!"</div><div class="im"><div>
<br></div><div>
<br></div><div>vlPolygons.select( [] ) # recuperi tutte le geometrie senza attributi</div><div>featPoly = QgsFeature() # crei una feature vuota per il poligono</div><div><br></div></div><div>dizionario_strati = {}</div></span></font></font></font></div>
</blockquote><div>fino qui è ok.<br> <br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div><font color="#888888"><font color="#000000"><font face="arial, sans-serif"><span style="border-collapse: collapse;"><div>
lista_quote = []</div></span></font></font></font></div></blockquote><div>è questa linea che crea tutti i problemi:<br>tu crei una lista fuori dai 2 cicli, quindi la lista sarà sempre la stessa ad ogni ciclo e quindi <br>
aggiungerai sempre la medesima lista a tutte le voci del dizionario. La lista alla fine conterrà <br>tutti i punti (o quasi tutti, dipende dall'unione dei bbox dei poligoni), quindi ogni voce del <br>dizionario avrà sempre come valore una lista (la medesima) con tutti i punti.<br>
<br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div><font color="#888888"><font color="#000000"><font face="arial, sans-serif"><span style="border-collapse: collapse;">
<div></div><div>while vlPolygons.nextFeature( featPoly ): # cicli sulle feature recuperate, featPoly conterra la feature poligonale attuale</div><div class="im"><div><span style="white-space: pre-wrap;">        </span>vlPoints.select( [], featPoly.geometry().boundingBox() ) # recupera i punti nel bbox del poligono</div>
<div><span style="white-space: pre-wrap;">        </span>featPoint = QgsFeature() # crei una feature vuota per il punto</div></div></span></font></font></font></div></blockquote><div>Inserisci invece la riga di creazione della lista qui e tutto si dovrebbe risolvere ;)<br>
<br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div><font color="#888888"><font color="#000000"><font face="arial, sans-serif"><span style="border-collapse: collapse;"><div>
<span style="white-space: pre-wrap;">        </span>while vlPoints.nextFeature( featPoint ): # cicli sulle feature recuperate, featPoint conterra la feature puntale attuale</div><div class="im">
<div><span style="white-space: pre-wrap;">                </span>if featPoly.geometry().contains( featPoint.geometry() ): # adesso con la contains() verifichi che effettivamente sia contenuto nel poligono</div></div><div><span style="white-space: pre-wrap;">                        </span>lista_quote.append(featPoint.id())</div>
<div><span style="white-space: pre-wrap;">        </span>dizionario_strati[featPoly.id()] = lista_quote</div><div><br></div><div>print diz</div><div><br></div><div>print "Numero di poligoni controllati: ", len(diz)</div>
</span></font>
</font></font></div>
</blockquote></div><br>Saluti.<br clear="all"><br>-- <br>Giuseppe Sucameli<br><br>