[Gfoss] Trovare extent del layer da console di python

Luigi Pirelli luipir a gmail.com
Lun 9 Mar 2015 13:33:31 CET


non avendo i dati sottomano, su due piedi farei il debug della nonna
1) controllerei che le x e y di geomExtentDiControllo siano lon e lat
2) controllerei che gli shape siano nella stessa proiezione con cui
hai espresso il bounding box di geomExtentDiControllo
3) controllerei che gli extent degli shape (fanne un print) per
verificare a mano se within debba darti true o false
4) verificherei anche con l'operatore intersects di QgsGeometry

ciao Luigi Pirelli

2015-03-09 12:44 GMT+01:00 Romina Di Paolo <romi.dipaolo a gmail.com>:
>
> Grazie Luigi per l'esempio fornito,
> Quindi da quello che hai riportato nell'esempio da una parte ho la mia lista
> di shp (extent = vl.extent) che deve essere confrontata con un extent di
> controllo ovvero geomExtentDiControllo. Il mio problema è che non so come
> accedere alle proprietà geometriche di quest'ultimo.
>
> Ho provato così
>
> folder = 'S:\\Dati_geografici_RP\\I.6_Particelle catastali\\Catastale'
> lista_folder = (os.listdir(folder))
> geomExtentDiControllo = QgsGeometry.fromRect(QgsRectangle (xmin
> =442882.70,ymin = 5015200.28,xmax =487902.38,ymax =5087429.92))
>
> 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:
>             vl = QgsVectorLayer(shp, "mioshape", "ogr")
>             extent = vl.extent()
>             geomExtent = QgsGeometry.fromRect(extent)
>             isInside = geomExtent.within(geomExtentDiControllo)
>             if isInside:
>                 QgsMapLayerRegistri.instance().addMapLayer(vl)
>
> In grassetto la parte che mi è ancora lacunosa infatti il programma finisce
> senza restituire nulla!
>
> Sto usando come riferimento questo perchè sono ancora alle prime armi come
> si può capire!
> http://www.padido.eu/gfoss/qgis/workshop/workshop/esplorare/python_in_qgis_tutorial2.html
>
>
>
>
> 2015-03-06 11:10 GMT+01:00 Luigi Pirelli <luipir a gmail.com>:
>
> 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


Maggiori informazioni sulla lista Gfoss