8

In QGIS 3.12 I need to calculate the shortest distance from the boundary of one polygon to the boundary lines of a set of polygons as shown in the image below

enter image description here

I have followed the instructions according to this question Calculating shortest distance between multiple Polygon borders to a common Polygon border?.

It seemed to provide a good solution using the field calculator to generate a new feature in the attribute table (eg the attribute table of the blue polygons) using the following formula

distance($geometry, geom_from_wkt('Polygon ((........))'))

as described in the above link. However, when I randomly checked some of the distances using the measuring tool, while many of my tests were consistent, I found several that were incorrect e.g 196.11 km vs 216.9 km.

All the shapefiles and my project are in the same projection system.

I cannot figure out why there are the errors or if this is the best way to calculate these distances.

Ideally I would like tracklines generated to show the shortest distance, however this may be over complicated.

1
  • 1
    Have you had a look at join by nearest? If so, what does it lack?
    – Erik
    Commented Sep 25, 2020 at 11:08

1 Answer 1

10

If only length values are needed, please use the following expression in the "Field Calculator"

length(
    shortest_line(
        $geometry,
        geometry(get_feature('building', 'osm_id', '1234567'))
        )
    )

In my example I am referring to a feature by its "id" from a certain layer, otherwise use geom_from_wkt().

If new geometries have to be created, then try using the "Geometry by expression" geoalgorithm from the QGIS's Processing Toolbox (Ctrl+Alt+T) with the following expression:

shortest_line(
    $geometry,
    geometry(get_feature('building', 'osm_id', '1234567'))
    )

enter image description here

1
  • 1
    Thank you so much this looks wxactly what I am trying to do
    – Geotern
    Commented Sep 25, 2020 at 15:22

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.