I have a shapefile of the Washington metro area, but along much of the route multiple lines run parallel to each other (see picture 1) and I need to collapse them into a single line.

I've tried creating a buffer and dissolving the result, which visually achieves what I'm looking for but ultimately I need a single shapefile line representing the center line that I can then run the qchainage process on but so far haven't been able to achieve that.

Does anyone have a way to achieve this in QGIS?

I believe I'm essentially trying to replicate the 'Collapse Dual Lines To Centerline' functionality in ArcGIS.

Input shapefile:

enter image description here

Dissolve Buffer result: enter image description here

  • 2
    Why don't you simply only use the middle line and delete the rest? Yeah, I am lazy, I know...
    – Erik
    Jun 29, 2018 at 14:47
  • Possible duplicate of Merging close lines?
    – Erik
    Jun 29, 2018 at 14:49
  • Hi Erik, this is just a small snapshot of a much large file, some lines extend further than others so it wouldn't really be feasible to do it manually!! (i wish it was) I did see the merging close lines thread, but wasn't able to follow second part of the answer (below), so clarification required please! "import the layer into a postgis database and create the middle line using ST_ApproximateMedialAxis() function: SELECT ST_ApproximateMedialAxis(geom) AS geom INTO road_centre_line FROM road_buffer"
    – Jsangster
    Jun 29, 2018 at 14:53
  • If you're working with QGIS 3.0 and geopackages, that should not be necessary, since geopackages are supposed to be editable by SQL-commands.
    – Erik
    Jun 29, 2018 at 15:26
  • Erik, could you elaborate on how to apply that function? Novice user here.
    – Jsangster
    Jun 29, 2018 at 15:32

1 Answer 1


I have a function that returns a parallel line from three parameters, a line object, a left or right, and a distance. The returned line is parallel to the left or right of the given line a distance of the given distance.

The function takes each node of the given line and computes the center of a tangent circle (90 degrees to left or right of the current bearing) with a radius of the given distance and uses the center of the circle as the node's parallel point.

After the function returns the new line, I reverse order the the nodes of the returned parallel line if its drawn direction does not match the given line.

For street center lines, the original line must accommodate extensions to intersections.

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.