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

Umberto Zulian uzulian a hotmail.com
Mar 11 Lug 2017 10:29:44 PDT


Forse perche' i valori geometrici (geom) tra due layer con proiezioni diverse non sono sovrapponibili?


________________________________
Da: QGIS-it-user <qgis-it-user-bounces a lists.osgeo.org> per conto di SC <elyparker1 a gmail.com>
Inviato: martedì 11 luglio 2017 18:21
A: qgis-it-user a lists.osgeo.org
Oggetto: [QGIS-it-user] Fwd: intersezione layer e calcolo area e crs differenti

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))+'%'

_______________________________________________
QGIS-it-user mailing list
QGIS-it-user a lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/qgis-it-user
Pagina di informazioni della lista QGIS-it-user<https://lists.osgeo.org/mailman/listinfo/qgis-it-user>
lists.osgeo.org
Lista di discussione e supporto per gli utenti italiani di QGIS. Per consultare la raccolta dei messaggi precedentemente inviati alla lista, visita gli Archivi ...



-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.osgeo.org/pipermail/qgis-it-user/attachments/20170711/66425ec0/attachment.html>


Maggiori informazioni sulla lista QGIS-it-user