I am looking for an expression in QGIS that allows me to select polygon features (layer 1, red polygons), that intersect more than 50 percent of the buffer ring around a point feature of another layer (layer 2, green point).
The buffer does not touch the buffered feature. It has a certain distance to it. Ideally I would not need to create a new layer for this.
I want to use this expression for the field calculator. Combined with CASE WHEN THEN, the polygons in layer 1 that intersect more than 50 percent of the buffer ring will get the value "good".
1 Answer 1
Something along the lines of the following may achieve your objective.
You haven't specified how the buffer ring is defined. I have arbitrarily given it an outer radius of 1000 and inner radius of 500, with 50 segments.
Also, I've just assumed that the green point is feature ID = 1 in (which you will need to replace with your layer ID).
In short:
- Create an outer ring and inner ring based on the green point
- Take the difference of those to create your buffer ring
- Take the intersection of the buffer ring and each polygon
- Calculate the area of intersection
- Divide this by the total area of each polygon
- Check if greater than 0.5
area(
intersection(
difference(
buffer(
geometry(
get_feature_by_id(<layer2>,1)
),1000,50
),
buffer(
geometry(
get_feature_by_id(<layer2>,1)
),500,50
)
),$geometry
)
) / $area > 0.5
-
Thanks a lot. I specify: The buffer shoud be around all features (green points) in layer 2, other asumptions are perfect. I adopted your expression to my case: CASE WHEN area(intersection( difference( buffer(geometry('layer 2'),1000,50), buffer(geometry('layer 2'),500,50)),$geometry) ) / $area > 0.5 THEN 'medium' WHEN area(intersection( difference(buffer(geometry('layer 2'),499,50), buffer(geometry('layer 2'),1,50)),$geometry) ) / $area > 0.5 THEN 'good' ELSE 'bad' END I receive the error message: cannot convert to feature. U know why?Mat Thias– Mat Thias2023年05月15日 15:15:04 +00:00Commented May 15, 2023 at 15:15
-
1The
geometry
function in Expression Builder takes a feature argument, not a layer - hence the error message: "cannot convert to feature"Tom Brennan– Tom Brennan2023年05月15日 22:05:44 +00:00Commented May 15, 2023 at 22:05 -
1If you want to deal with multiple buffer rings, you will need to define your problem more carefully. For example, what happens if the rings overlap? And what if a polygon overlaps 30% of one buffer ring, and 40% of another? Is that good or bad?Tom Brennan– Tom Brennan2023年05月15日 22:16:48 +00:00Commented May 15, 2023 at 22:16
-
1Geometry in expression builder can't refer to a layer. However, there are sometimes tricks that can be used to sum up results across multiple features of a layer. Remember to go back and edit the original question with clarifications (and possibly extra screenshots).Tom Brennan– Tom Brennan2023年05月17日 02:04:56 +00:00Commented May 17, 2023 at 2:04
-
1You may in fact be better off asking your more detailed requirements as a separate question, referencing this one.Tom Brennan– Tom Brennan2023年05月17日 02:27:24 +00:00Commented May 17, 2023 at 2:27