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

Rispondere a