intersezione layer e calcolo area e crs differenti

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

intersezione layer e calcolo area e crs differenti

Ely Parker
Salve ho scritto un piccolo script per la consolo di QGIS per calcolare
le aree intersecate dei vari geometrie di un livello rispetto l'altro

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 [hidden email]

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

_______________________________________________
[hidden email]
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.
808 iscritti al 07/03/2017