[QGIS-it-user] Fwd: intersezione layer e calcolo area e crs differenti

SC elyparker1 a gmail.com
Mar 11 Lug 2017 09:21:17 PDT


Salve ho scritto un piccolo script per la console di QGIS per calcolare

le aree intersecate dei vari geometrie di un livello rispetto l'altro, ai piu non sfuggirà la possibilità di usarlo per per calcolare  certificati di destinazione urbanistica rispetto un prg

c'è un problema quando i layer sono  due sistemi di riferimenti
differenti ,il calcolo non funziona, mentre va bene se i liveli sono
sullo stesso crs

sapete dirmi se è

1)un bug di qgis

2) scelta  progettuale (perchè?) da ovviare tramite codice

3)api sbagliate che ho usato si poteva scegliere altra soluzione

saluti



# /* copyright 2017 by Salvo Caligiore caligiore a gmail.com

livelli=iface.mapCanvas().layers()


def dataGeom(geom,lv):
#calcola le aree delle intersezioni delle features di un determinato
livello rispetto ad una data geometria e restituisce una lista di
feature con il corrispondente valore di area intersecato
#la feauture in lista serve per altri calcoli nella procedura principale
                 rect = geom.boundingBox()

                 request=QgsFeatureRequest(rect)
                 lista=[]
                 feat=lv.getFeatures(request)
                 da = QgsDistanceArea()
                 for f in feat:

                     intersezione=f.geometry().intersection(geom)

                     if intersezione==None : continue
                     else :
a=round(da.convertAreaMeasurement(da.measureArea(intersezione),1),2)



                         if a>0 : lista.append((f,round(a,2)))
                         if lv.geometryType()==0: lista.append((f," "))
                 return lista


da = QgsDistanceArea()
#incrocia i livelli fra di loro e interseca ogni feature con le altre
del livello incrociato stampando le informazioni
for x in livelli :
     for y in livelli:
         for f in y.getFeatures():

             lst=dataGeom(f.geometry(),x)

             for z,a in  lst:
areafeature=round(da.convertAreaMeasurement(f.geometry().area(),1),2)
                 print x.name(), y.name(),"ID",f.id(),"Area
Totale",areafeature , "Area Intersecata", a , "ZID",z.id(),"rap % fra
inter e area f" ,str(round((a/areafeature)*100,2))+'%'



Maggiori informazioni sulla lista QGIS-it-user