This tool runs with Python 3.6 and reads Polygon/MultiPolygon datasets such as i.e. the geographic regions from Natural Earth and extracts smoothed centerlines for better label placement. This method is used to create the label layer of EOX Maps.
To do so, it a Voronoi diagram is created to get the polygon skeleton where the skeleton centerline is selected and smoothed.
Steps:
- Extract outline.
- Segmentize outline to get more evenly distributed outline points.
- Extract points.
- If there are too many points, simplify the segmentized outline and Extract points again.
- Create Voronoi diagram.
- Select all Voronoi edges which are inside the source polygon.
- Determine the best line.
- Smooth line.
clone repository and run
pip install -r requirements.txt
python setup.py install
$ label_centerlines --help
Usage: label_centerlines [OPTIONS] INPUT_PATH OUTPUT_PATH
Read features, convert to centerlines and write to output.
Multipart features (MultiPolygons) from input will be converted to
singlepart features, i.e. all output features written will be LineString
geometries, not MultiLineString geometries.
Options:
--version Show the version and exit.
--segmentize_maxlen FLOAT Maximum segment length for polygon borders.
(default: 0.5)
--max_points INTEGER Number of points per geometry allowed before
simplifying. (default: 3000)
--simplification FLOAT Simplification threshold. (default: 0.05)
--smooth INTEGER Smoothness of the output centerlines.
(default: 5)
--output_driver [GeoJSON|GPKG] Output format. (default: 'GeoJSON')
--verbose show information on processed features
--debug show debug log messages
--help Show this message and exit.
>>> from label_centerlines import get_centerline >>> help(get_centerline) get_centerline(geom, segmentize_maxlen=0.5, max_points=3000, simplification=0.05, smooth_sigma=5) Return centerline from geometry. Parameters: ----------- geom : shapely Polygon or MultiPolygon segmentize_maxlen : Maximum segment length for polygon borders. (default: 0.5) max_points : Number of points per geometry allowed before simplifying. (default: 3000) simplification : Simplification threshold. (default: 0.05) smooth_sigma : Smoothness of the output centerlines. (default: 5) Returns: -------- geometry : LineString or MultiLineString Raises: ------- CenterlineError : if centerline cannot be extracted from Polygon TypeError : if input geometry is not Polygon or MultiPolygon
MIT License
Copyright (c) 2015, 2016, 2017, 2018 EOX IT Services
(see LICENSE file for more details)