In this last two days I've been expanding
osm-centerlines
. Now it not only
supports ways more complex than a simple rectangle, but also ones that lead to
'branches' (unfortunately, most probably because the mapper either imported
bad data or mapped it himself). Still, I tested it in very complex polygons
and the result is not pretty. There is still lots of room for improvements.
Unluckily, it's not as stand alone as it could be.
The problem is that, so far, the algos force you to provide now only the polygon
you want to process, but also its
skeleton and
medial. The code extends the
medial using info extracted from the skeleton in such a way that the resulting
medial ends on a segment of the polygon, hopefully the one(s) that cross
from one riverbank to another at down and upstream. Calculating the skeleton
could be performed by CGAL
, but the current
Python binding doesn't include
that function yet. As for the medial, SFCGAL (a C++ wrapper for CGAL)
exports a function that calculates an approximative medial,
but there seem to be no Python bindings for them yet.
So, a partial solution would be to use PostGIS-2.2's ST_StraightSkeleton()
and
ST_ApproximateMedialAxis()
, so I added a function called
skeleton_medial_from_postgis()
. The parameters are a psycopg2
connection to a
PostgreSQL+PostGIS database and the way you want to calculate, as a shapely.geometry
,
and it returns the skeleton and the medial ready to be fed into extend_medials()
.
The result of that should be ready for mapping.
So there's that. I'll be trying to improve it in the next days, and start looking into converting it into a JOSM plugin.
openstreetmapgispython