QGIS Buffer Geometry – Create Radius Line and Label Length for Buffer Geometry in QGIS

buffergeometry-generatorlabelingqgisqgis-expression

From a point geometry layer, I'm using an expression with buffer function as shown in the screenshot below:

enter image description here

I would like to add two more expressions to this point geometry layer:

  1. An expression for Symbology to draw the radius line
  2. An expression for Labels to add the length value of the radius

The expression that creates the buffer is as follows:

buffer(
    $geometry,
    array_mean(  -- lengths mean
        array_foreach(
            overlay_nearest( -- get nearest points
                'POINT_LAYER',
                $geometry,
                limit:=4
            ),
            length(
                make_line(
                    $geometry,
                    @element
                )
            )
        )
    )   
)

I show a screenshot with the expected result:

enter image description here

Best Answer

For the radial line (a Geometry Generator symbol layer):

with_variable(
    'buffer_dist',           -- store result of distance calculation as a variable
    array_mean( -- lengths mean 
        array_foreach( 
            overlay_nearest( -- get nearest points 
                @layer, 
                $geometry, 
                limit:=4 
            ), 
            length( 
                make_line( 
                    $geometry, @element 
                ) 
            ) 
        )
    ),
        
    make_line(
        $geometry,
        project(
            $geometry,
            @buffer_dist,   -- insert the calculated value as a variable
            radians(270)
        )
    )
)

For the label position (Geometry Generator placement):

with_variable(
    'buffer_dist',
    array_mean( -- lengths mean 
        array_foreach( 
            overlay_nearest( -- get nearest points 
                @layer, 
                $geometry, 
                limit:=4 
            ), 
            length( 
                make_line( 
                    $geometry, @element 
                ) 
            ) 
        )
    ),
        
    project(
        $geometry,
        @buffer_dist / 2,      
        radians(270)
    )
)

The label expression:

array_mean( -- lengths mean 
        array_foreach( 
            overlay_nearest( -- get nearest points 
                @layer, 
                $geometry, 
                limit:=4 
            ), 
            length( 
                make_line( 
                    $geometry, @element 
                ) 
            ) 
        )
    )

Result:

enter image description here