Hi Klaus
Thanks a lot, works pefect! collect_gemetries() and the other way around did 
the trick.
Thanks also for the hint with the geometry generator.
Bruno

> Date: Thu, 4 Apr 2024 12:01:21 +0000
> From: Klaus Affeldt <k...@ansperger.de>
> To: "qgis-user@lists.osgeo.org" <qgis-user@lists.osgeo.org>
> Subject: [Qgis-user] Calculate intersecting area of two layers in a
>       virtual field. Context of @geometry in overlay_intersects()
> Message-ID: <5bcb1461d75f470bb86c03fc07b2c...@ansperger.de>
> Content-Type: text/plain; charset="iso-8859-1"
> 
> Hello Bruno,
> 
> try it the other way around:
> 
> coalesce(
>   area(
>     intersection(
>       @geometry, 
>       collect_geometries(
>         overlay_intersects(
>           'forest',
>           @geometry
>         )
>       )
>     )
>   ),
>   0
> )
> 
> In addition you can use the inner part in the geometry generator.
> So you have a visual help to compare your results:
> 
>     intersection(
>       @geometry, 
>       collect_geometries(
>         overlay_intersects(
>           'forest',
>           @geometry
>         )
>       )
>     )
> 
> Mit freundlichen Gr??en
> 
> Ihre PV ANSPERGER mbH
> Klaus Affeldt
> 
> Zentrale Kamp-Lintfort
> S?dstra?e 25
> 47475 Kamp-Lintfort
> Tel. +49 2842 9635-14
> https://www.ansperger.de
> 
> A==============================================================================================
> >> 
> >> Dear list
> >> 
> >> Great, how powerful expressions are in QGIS!
> >> I have two polygon layers, one with parcels and one with forests. In a 
> >> virtual field of the layer parcels I'm trying to calculate the area 
> >> covered with forest. I can sum the area of intersecting forests in a 
> >> virtual field with the follwing expression:
> >> 
> >> coalesce( 
> >>   array_sum( 
> >>     overlay_intersects(
> >>       layer:= 'forest', 
> >>       expression:= area(@geometry)
> >>     )
> >>   )
> >> , 0)
> >> 
> >> But @geometry doesen't return the intersecting area. It returns the whole 
> >> polygons, that partly intersect the parcel. So I could add an additional 
> >> intersection():
> >> 
> >> coalesce( 
> >>   array_sum( 
> >>     overlay_intersects(
> >>       layer:= 'forest', 
> >>       expression:= area(
> >>         intersection(
> >>           @geometry, geometry(get_feature_by_id()
> >>         )
> >>       )
> >>     )
> >>   )
> >> , 0)
> >> 
> >> @geometry is calculated in the context of the layer forests. How could I 
> >> access the geometry of the parcel inside of overlay_intersects()? 
> >> get_feature_by_id() doesn't seem to help, since I don't see a way to get 
> >> the actual ID of the parcel. 
> >> It is not possible to return @geometry as expression in overlay_intersects 
> >> and do the intersection outside.
> >> 
> >> Does any one have an idea, how I could get the intersected area?
> >> Thank you. Bruno
_______________________________________________
QGIS-User mailing list
QGIS-User@lists.osgeo.org
List info: https://lists.osgeo.org/mailman/listinfo/qgis-user
Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-user

Reply via email to