[Gfoss] Trovare extent del layer da console di python

Luigi Pirelli luipir a gmail.com
Ven 6 Mar 2015 11:10:30 CET


senza scomodare gdal e rimanendo in pyqgis

1) carichi il layer in memoria (senza visualizzarlo)

vl = QgsVectorLayer(shp, "mioshape", "ogr")

2) prendi l'extent del vettore

extent = vl.extent()

come vedrai extent e' un QgsRectangle =>

3) ho bisogno di un QgsGeometry per usarne gli operatori spaziali

geomExtent = QgsGeometry.fromRect(extent)

4) alla stessa cosa per generarti la geometria dell'extent che vuoi contollare

geomExtentDiControllo = QgsGeometry.fromRect(...un qgis rectangle... )

ti consiglio di vederti:  http://qgis.org/api/classQgsGeometry.html
per costruirti il QgsREctangle di controllo

5) usi l'operatore di QgsGeometry che meglio ti si addice

isInside = geomExtent.within(geomExtentDiControllo)

oppure

isInside = geomExtent.intersects(geomExtentDiControllo)

if isInside:
    QgsMapLayerRegistri.instance().addMapLayer(vl)

ciao Luigi Pirelli

2015-03-06 10:36 GMT+01:00 Romina Di Paolo <romi.dipaolo a gmail.com>:
> Ciao a tutti,
>
> sto provando a creare uno script nella console di qgis che come prima cosa
> estragga da ciascuna cartella lo shape chiamato "particella.shp" e poi
> esegua un controllo sull'estensione del layer per verificare se è
> all'interno della provincia che mi interessa oppure no, nel primo caso
> vorrei che il layer venisse aggiunto nella toc altrimenti scartato.
> Ammesso che mi sia riuscita a spiegare vi allego parte dello script
>
> import sys,os,string
> import processing
>
>
> folder = 'C:\\Dati_geografici\\Particelle catastali\\Catastale'
> lista_folder = (os.listdir(folder))
>
> for sub_folder in lista_folder:
>     new_folder = folder+'\\'+sub_folder
>     lista_shp =  (os.listdir(new_folder))
>
>     for shp in lista_shp:
>         if string.find(shp,'particella.shp') >=0:
>        MANCA FUNZIONE PER CONTROLLARE L'ESTENSIONE DEL LAYER
>             qgis.utils.iface.addVectorLayer(shp,shp,"ogr")
>
>
> cercando tra le API di qgis ho visto che esiste questa classe QgsVectorLayer
> che tra le varie cose calcola anche l'extent ma non so come richiamarla e
> soprattutto quale operatore di contronto usare per verificare che il mio
> layer cada dentro un determinato extent.
> Altro problema il caricamento del layer nella toc mediante addVectorLayer mi
> restituisce questo errore "Il layer non è valido: Il layer
> D197__particella.shp non è valido e non può essere aggiunto alla mappa" che
> nonc apisco da cosa dipenda.
>
> Grazie in anticipo!
>
> _______________________________________________
> Gfoss a lists.gfoss.it
> http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
> Questa e' una lista di discussione pubblica aperta a tutti.
> I messaggi di questa lista non hanno relazione diretta con le posizioni
> dell'Associazione GFOSS.it.
> 666+40 iscritti al 5.6.2014


Maggiori informazioni sulla lista Gfoss