Ciao Giuseppe, ho provato il plugin e gira correttamente. Tuttavia sto sbagliando qualcosa nella creazione del dizionario.
Ho modificato lo script (vedi sotto) per le mie esigenze chiamando tutti i poligoni (strati archeologici) e le quote relative di uno scavo archeologico. Ho creato un dizionario_strati e una lista_quote. a questo punto vorrei ottenere un dizionario tipo questo: {"strato_q":["quota_1", "quota_2", "quota_3"], ... } tuttavia, modificando in questo modo lo script: ........... if featPoly.geometry().contains( featPoint.geometry() ): # adesso con la contains() verifichi che effettivamente sia contenuto nel poligono lista_quote.append(featPoint.id()) dizionario_strati[featPoly.id()] = lista_quote e stampando la lunghezza del dizionario, noto che il while passa in rassegna tutte le geometrie poligonali (i miei strati), ma inserisce per ogni strato in lista quote tutti i punti che ho richiamato, e non solo quelli che cadono nella singola geometria. Ho fatto una verifica manuale su una geometria https://picasaweb.google.com/mandoluca/Qgis#5577383282759381138 qui dovrebbero comparire nella lista legata alla geometria bordata in rosso, solo tre quote, invece le ho richiamate tutte....ovviamente l'errore รจ in: lista_quote.append(featPoint.id()) Come faccio a passare alla lista solo i punti che cadono nella mia geometria? Grazie ancora Luca import sys sys.path.insert(0, '/Applications/QGIS.app/Contents/Resources/python/') from qgis.core import * from qgis.gui import * # supply path to where is your qgis installed QgsApplication.setPrefixPath("/Applications/QGIS.app/Contents/MacOS/", True) # load providers QgsApplication.initQgis() uri = QgsDataSourceURI() # set host name, port, database name, username and password uri.setConnection("localhost", "5432", "pyarchinit", "postgres", "mypass") # set database schema, table name, geometry column and optionaly subset (WHERE clause) uri.setDataSource("public", "pyunitastratigrafiche", "the_geom", "scavo_s = 'Palazzo Ghetti, Rimini' AND area_s = 1") vlPolygons = QgsVectorLayer(uri.uri(), "US", "postgres") uri.setDataSource("public", "pyarchinit_quote", "the_geom", "sito_q = 'Palazzo Ghetti, Rimini' AND area_q = 1") vlPoints = QgsVectorLayer(uri.uri(), "Quote", "postgres") if vlPolygons.isValid(): print "Layer polygons loaded!" if vlPoints.isValid(): print "Layer points loaded!" vlPolygons.select( [] ) # recuperi tutte le geometrie senza attributi featPoly = QgsFeature() # crei una feature vuota per il poligono dizionario_strati = {} lista_quote = [] while vlPolygons.nextFeature( featPoly ): # cicli sulle feature recuperate, featPoly conterra la feature poligonale attuale vlPoints.select( [], featPoly.geometry().boundingBox() ) # recupera i punti nel bbox del poligono featPoint = QgsFeature() # crei una feature vuota per il punto while vlPoints.nextFeature( featPoint ): # cicli sulle feature recuperate, featPoint conterra la feature puntale attuale if featPoly.geometry().contains( featPoint.geometry() ): # adesso con la contains() verifichi che effettivamente sia contenuto nel poligono lista_quote.append(featPoint.id()) dizionario_strati[featPoly.id()] = lista_quote print diz print "Numero di poligoni controllati: ", len(diz)
_______________________________________________ Iscriviti all'associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione Gfoss@lists.gfoss.it http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss Questa e' una lista di discussione pubblica aperta a tutti. Non inviate messaggi commerciali. I messaggi di questa lista non rispecchiano necessariamente le posizioni dell'Associazione GFOSS.it. 502 iscritti all'11.2.2011