Automated Methods For Extracting Polygon Centrelines In Qgis

The Problem of Extracting Centrelines

Extracting the centrelines of polygons in GIS software is an essential task for many geospatial workflows. The centreline represents the core line running lengthwise through the middle of a polygon feature. Centreline data allows users to analyze polygon attributes like roads or rivers in their linear form for distance and routing calculations. Manual digitization of centrelines can be extremely time-consuming for large polygon datasets. Using automated methods to algorithmically derive centrelines can save substantial time and effort.

QGIS provides user-friendly tools for automating centreline extraction without specialized plugins or extensions. Core QGIS processing algorithms allow users to swiftly generate centroid lines and medial axes for polygons at any scale. This article will explore the main approaches available in QGIS for extracting high quality polygon centrelines through both GUI-based and scripting methods.

Methods for Automating Centrelines Extraction

Using the Polygon Centroids Tool

The simplest automated technique for extracting centreline points utilizes the QGIS “Polygon centroids” algorithm. This creates point features representing the calculated centroid coordinate for every input polygon. The centroid point lies at the polygon’s center of mass and provides a reasonable approximation of its overall centreline.

After running the “Polygon centroids” tool, users can connect these central points into continuous centreline features with additional processing. Converting the centroid points into polyline features generates straight medial lines running through each polygon. This approach works well for simple convex polygons like homogeneous land parcels.

Leveraging the Polygon to Line Algorithm

For polygons with more complex or concave geometries, QGIS’s “Polygon to line” tool provides enhanced centrelines extraction. Instead of just the central point, this algorithm transforms the borders of polygons into representative linear features. It traces polygon boundaries to create outline lines running equidistantly along the interior width.

The “Polygon to line” method provides single straight centrelines for elementary polygons, similar to the centroid connector approach. When applied to compound multi-part polygons, it can differentiate interior boundaries and holes as distinct centreline segments. This allows better characterization of complex real-world features like winding rivers or intricate lake systems.

Custom Python Scripting for Advanced Centrelines

Experienced QGIS users can further customize automated centreline generation through Python scripting with the PyQGIS library. Python code can incorporate advanced geoprocessing and computational geometry functions tailored to application-specific centrelines criteria. Instead of simple straight medial axes, scripting enables smoothed, curved centrelines derived through iterative optimization of polygon bisectors and interior buffers.

Custom scripts can also integrate supplementary data like elevation rasters to trace 3D centrelines following surface terrain. Scripts grant ultimate control over line vertex density, smoothing parameters, edge cases handling, multi-part behaviour, and output formatting. Automated iterative testing enables refinement towards optimal centreline representations.

Step-by-Step Workflow for Centrelines Extraction

Here is a walkthrough covering a start-to-finish workflow to extract polygon centrelines for a sample roads dataset using the main methods discussed:

  1. Import polygon vector layer into QGIS – e.g. roads.geojson containing road area features
  2. Launch “Polygon Centroids” tool from Vector Geometry menu to generate central points for each polygon
  3. Run “Points to Path” tool from Processing Toolbox to interconnect centroid points with straight lines
  4. Assess medial axes quality – review for gaps, overlaps, and deviations
  5. Re-run “Polygon to Line” tool to trace outline-aligned centreline segments
  6. Manually edit artefacts if needed – connect gaps or smooth corners in lines
  7. (Advanced) Customize cleaning and smoothing with Python scripting for refined results
  8. Finalize Polygon Centrelines layer for export and downstream usage

Troubleshooting Common Issues with Centrelines

Some potential pitfalls can affect centreline generation quality for intricate cases:

  • Overlapping duplicate lines at adjacent polygon edges
  • Gaps from edge cases interrupting centreline continuity
  • Excessive vertices slowing processing and complicating analysis
  • Erratic “spikes” into polygon holes disrupting expected flow

Attempting different parameters and checking intermediate outputs helps identify and resolve problems:

  • Adjust smoothing threshold and simplify geometries to merge split/redundant lines
  • Ensure proper polygon layer topology to align shared boundaries
  • Set vertex thinning distance to curb over-complex medial axes
  • Introduce conditional hole handling logic in scripts to avoid anomalies

Certain difficult polygons may ultimately require some manual editing or script tweaks to attain publication quality centrelines. But judicious use of QGIS’s mixing automated tools with targeted refinements enables efficient centreline generation at any project scale.

Example Codes for Automated Centrelines Generation

Here is sample Python code implementing custom polygon centreline extraction logic leveraging Shapely processing functions:

import shapely
from qgis.core import *
from qgis.analysis import *  

layer = iface.activeLayer()

feat_dict = {f.id(): f for f in layer.getFeatures()}
        
line_layer = QgsVectorLayer('LineString?crs='+layer.sourceCrs().authid(), 'centrelines', 'memory')
prov = line_layer.dataProvider()

for f_id, f in feat_dict.items():
   
    geom = f.geometry()
    edges = [edge for edge in geom.exterior.boundary.segments] 
    centroids = [edge.centroid() for edge in edges]
    bisect_lines = [shapely.geometry.LineString([centroids[i], centroids[i+1]]) 
                    for i in range(len(centroids)-1)]

    for line in bisect_lines:         
        fet = QgsFeature()
        fet.setGeometry(QgsGeometry(line)) 
        prov.addFeatures([fet])
         
layer.dataProvider().addFeatures(line_layer.getFeatures())

This iterates polygon exterior boundaries to construct bisecting lines between sequential edge midpoints. Various geometry operations can augment this base logic to implement smoothing, simplification, terrain following, etc. Scripting provides ultimate flexibility to handle special cases.

Recommendations for Further Reading and Resources

For deeper exploration of automated centreline extraction methods in QGIS, consult these additional resources:

  • QGIS Documentation – Polygon Centroids Algorithm
  • QGIS Python Cookbook – Splitting Complex Polygons to Lines
  • GIS Lounge – A Review of Centerline Generation Techniques
  • FOSS4G Tutorials – Calculating Optimal CentreLines with PostGIS

This covers core techniques for leveraging QGIS tools to efficiently generate polygon centrelines. Both GUI and scripting approaches empower users to move beyond slow manual digitizing to extract accurate centrelines at scale.

Leave a Reply

Your email address will not be published. Required fields are marked *