I have a Polygon which I want to convert to centerline linestring.

Polygon IMAGE 1

I used the Vector to convert to Polyline but they are not center line as under:


enter image description here


Polyline created by the above tool is not centerline polyline.

enter image description here IMAGE 3

What I am expecting to get is as under (centerline per road, instead of the lines on the side of the road[Image 3]):

enter image description here



Answer: You can.

I found time for you and hurry to help you. My answer is now practical.

The original data and table names are fictitious, do not forget to rename them with reference to your example.

Sit in my car and go together to the stop - the "center line of the road."

The initial geodata are polygons of a road network with a width of about 11 m in the EPSG: 4326 coordinate system, broken into segments, see Fig. 1.

enter image description here

  1. In a convenient way for you, create a negative buffer, for example in pgAdmin:

create table buf_negative as SELECT ST_Buffer (geom, -0.000045) as geom FROM buf_dump; or in QGIS tools: "Vector-Geoprocessing-Buffer Zones". Thus, we reduced the width of the roads from 11 m to 1 m, see Fig.2

enter image description here

  1. Convert the negative buffer (1 m) into lines, for example with QGIS tools: "Vector-Processing geometry-polygons in a line" result see Fig. 3

enter image description here

  1. Extract from the lines of the point, for example with the QGIS tools: "Vector-Processing geometry-Extract nodes", the result see Fig. 4

enter image description here

  1. Create point buffers from them, so that they intersect each other, Further combine them with each other using the tool "Vector>Geoprocessing>Merge" and extract centroids from adjacent buffers, the result is shown in Fig. 5 (centroids are red dots)

enter image description here

  1. From the centroid points, create the Delaunay Triangulation, for example with the QGIS tools: "Vector-Processing geometry-Delaunay triangulation", and trim the result with your 1 m negative buffer polygons, see the result of Fig. 6

enter image description here

  1. Blast the lines into segments, for example, using QGIS Desktop with GRASS tools: "Data Analysis - Lines-Explode Lines", see Fig. 7

enter image description here

  1. Run the following script in PGAdmin:

create table buf_centre_ln as SELECT ST_Intersection (a.geom, b.geom) AS geom FROM explode_ln as a JOIN buf_negative as b ON ST_Within (a.geom, b.geom);

see the result in Fig. 8

enter image description here

  1. Remove duplicating lines and do with the center lines, whatever,

It is possible to achieve it, on PostgresGis, with one of the options of the free tool "geom8tricks" With the "PolygonsToLines" option, once you select the origin polygons and the destination Database connection has been correctly configured, you get the line objects, centered on the polygons . The program does it in two stages, in a first one it obtains the decomposition of the polygon in lines, by means of st_skeleton function

In a second stage, the longest line of all those that make up the object is selected Select the longest line

The problem of intersections is solved whenever there is a primary key column in the origin polygons, which allows to distinguish between the objects that intersect Line Intersection


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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