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)