[Gfoss] Qgis e pyQgis: funzione contains()

Giuseppe Sucameli sucameli a faunalia.it
Gio 24 Feb 2011 14:35:17 CET


Ciao Luca,

2011/2/23 Luca Mandolesi <mandoluca a gmail.com>

> partendo da 2 layer, uno di poligoni e l'altro di punti, sapere per ogni
> poligono quanti punti ricadono in esso; che poi è quello che fa egregiamente
> il plugin di cui sopra.
>
>
> Fino a caricare le singole geometrie dal layer chiamandole da postgis ci
> arrivo, però, dando un occhio al cookbook di Qgis [1], vedo che la funzione
> contains() sta all'interno della classe QgsGeometry, e viene chiamata a
> partire da poligoni, punti o linee, create ad hoc.
>
> Partendo dai miei due layer caricati mediante la classe QgsVectorLayer e
> relativi metodi, come faccio a passarli a QgsGeometry? Devo ricavare i nodi
> di ogni poligono, e passarli a QgsGeometri e poi usare contains(), o c'è un
> altra strada?
>
se hai i due layer, siano vlPolygons and vlPoints

vlPolygons.select( [] ) # recuperi tutte le geometrie senza attributi
featPoly = QgsFeature() # crei una feature vuota per il poligono
while vlPolygons.nextFeature( featPoly ): # cicli sulle feature recuperate,
featPoly conterrà 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 conterrà la feature puntale attuale
        if featPoly.geometry().contains( featPoint.geometry() ): # adesso
con la contains() verifichi che effettivamente sia contenuto nel poligono
            # TODO: qui lavori sul punto
            # ad es. aggiungi il punto (l'id della feature puntale) alla
lista o dizionario o quel che sia

Non l'ho provato, l'ho scritto on-the-fly, quindi potrebbe non essere
perfettamente funzionante,
anche se sono abbastanza convinto di averlo scritto bene ;)

Oppure più semplicemente potresti recuperare tutti sia tutti i poligoni che
tutti i punti, ma in
quel caso saresti costretto a controllare tutti i punti per ogni
poligono.... no buono.

Qualcuno mi sa dare una mano? Vado direttamente alla lista degli
> sviluppatori di Qgis?
>
E' uguale, forse però ti avrebbero risposto prima :)
Piuttosto, guardati il plugin ClosestFeatureFinder (repo Faunalia) che usa
anche l'indice spaziale
per recuperare la feature più vicina. Sicuramente ti darà qualche spunto in
più.

Ciao a tutti
>
Saluti.

>
> Luca
>
>
> [1] http://www.qgis.it/pyqgis-cookbook/geometry.html
>
> _______________________________________________
> Iscriviti all'associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
> Gfoss a 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
>



-- 
Giuseppe Sucameli
-------------- parte successiva --------------
Un allegato HTML ?tato rimosso...
URL: <http://lists.gfoss.it/pipermail/gfoss/attachments/20110224/c120aa18/attachment.htm>


Maggiori informazioni sulla lista Gfoss