Noticing @edent’s take on a semantic tube map using data from wikidata, I started wondering (again?) about transit map layout engines.
There’s theory behind it (eg Martin Nöllenburg’s Automated Drawing of Metro Maps (2005)) and examples of folk having built tools to support automated layout (eg Automatic layout of schematic transit maps and Transportation maps – creation by optimisation), but I haven’t found a layout engine package that I can make use of (something that plays nice with networkx
, and perhaps complements osmnx for getting data out of OpenStreetMap, would be nice… Perhaps even a netwulf
filter for laying out transit maps via a GUI?).
Poking around, public-transport/generating-transit-maps links to a couple of repos that style an optimised graph for a couple of German transit routes. There’s a couple of links to possible optimisers / layout engines: this solution in Julia — dirkschumacher/TransitmapSolver.jl — and this nodejs application — juliuste/transit-map. The latter uses a commercial solver, Gurobi, but this post on Optimization Modeling in Python: PuLP, Gurobi, and CPLEX shows equivalent solutions to a (different) optimisation problem using both Gurobi and a free Python solver, PuLP. So it might be straightforward enough to create a Py equivalent of the nodejs solver?
Here’s a more recent package, again in node: gipong/automatic-metro-map.
As far as styling goes, there look to be various things out there. For example, this d3-tube-map, and another: d3-tube. And an HTML5 canvas solution.
Not quite what I had in mind re: layouts, but… wha’….? London tube netwrok as a git graph?!
In passing, having got a map, animating it might be nice… Here’s an old animation package — vasile/transit-map — that might help with that? Or maybe something lifted from this transport routing demo (the Cesium variant does animations along a route I think? More here).
For some 3D relief, harp.gl; and though not directly relevant, I do still like these ridge maps.