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 caligi...@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))+'%' _______________________________________________ QGIS-it-user mailing list QGIS-it-user@lists.osgeo.org https://lists.osgeo.org/mailman/listinfo/qgis-it-user