3

I have a polygon shapefile and a line shapefile with several thousand features each. I want to get:

The nearest distance between a polygon and a line that have the same attribute (e.g. ID). Example here (I want to get the green line as an output).

Desired output: Nearest distance between line and polygon with the same id (green line)

I have played around with various combinations of all distance tools in QGIS, like Distance to nearest hub, Join attributes by nearest, v.distance.

v.distance SHOULD be able to do what I want with 'upload' = 'to_attr', but I am getting no output.

2
  • Do you want an actual line geometry, or do you only need the distance value?
    – csk
    Commented Aug 19, 2019 at 16:23
  • Just the distance value would be enough, though the actual line geometry would have the bonus of making it easier to check visually whether the results are correct. The answer from @snaileater generates the distance, which is sufficient for me.
    – wowbag
    Commented Aug 20, 2019 at 8:46

1 Answer 1

1

I don't know about the tools you mention but you can try a query like this one :

select id, st_distance(poly.geometry, line.geometry) from poly, line
where poly.id=line.id

That should do the job ...

You input the query in QGIS DB Manager : You choose Database / Database Manager / Database Manager then Virtual Layers / Qgis Layers.

Adapt the query to your data sructure if needed ...

2
  • Beautiful, it works! I had to remove 'id' from the query though, it gave me an error message about being ambiguous. So: select st_distance(poly.geometry, line.geometry) from poly, line where poly.id=line.id
    – wowbag
    Commented Aug 20, 2019 at 8:37
  • yep you have to mention either table ... so poly.id or line.id ... in that case they will be equal anyway ...
    – Snaileater
    Commented Aug 20, 2019 at 8:42

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.