lanestyle
Lane-level road maps from Python.
Every lane at its real width, painted lane lines, and a click that shows where a lane leads. One offline HTML file.
Documentation · Live map · Get started · Gallery · Python API
Quick start
pip install lanestyle
import geopandas as gpd, pandas as pd
import lanestyle as ls
lanes = gpd.read_parquet("docs/data/monaco_lanes.parquet") # Monaco ships with the repo
turns = pd.read_parquet("docs/data/monaco_turns.parquet")
ls.render_lanes(lanes, turns=turns).save("monaco.html") # one file, opens offline
Your own area, from OpenStreetMap with duckOSM:
duckosm build --pbf monaco-latest.osm.pbf -o monaco.duckdb -m driving
duckosm gmns monaco.duckdb -m driving -o monaco_gmns.duckdb
lanes, turns = ls.from_gmns("monaco_gmns.duckdb")
ls.render_lanes(lanes, turns=turns).save("monaco.html")
What you get
- Lanes, not roads. Each lane is its own line, exactly its width in metres from zoom 16 on, so neighbours sit side by side with no gap and no overlap.
- Painted lane lines. Dashed dividers, a solid centre line, grey edges: drawn to scale and cut at junctions.
- Turns you can see. Click a lane: it turns red, the lanes it leads into green, U-turns purple. Every lane carries its turn label.
- Everything roadstyle has. Bridges over, tunnels under, base maps, the filter box, popups, arrows and the
rs*JavaScript API, from roadstyle. lanestyle is to lanes what mapstyle is to the full base map.
Gallery
Lane lines |
A roundabout |
A tunnel |
Bus lanes |
Click a lane |
Zoomed out |
What goes in
A GeoDataFrame with one row per lane. lane_id, geometry and highway are required; the rest
switches features on: width_m, use (bus, bike), bridge / tunnel / layer, name,
link_id + lane_num for the lane lines. An optional turns table (from_lane, to_lane,
type) gives the clicks and labels. from_gmns builds both from a duckOSM GMNS database.
Column by column: The lane table ·
settings: Settings ·
the whole chain from a .osm.pbf: From OSM to lanes.
For AI agents
- Using lanestyle: the agent skill
skills/lanestyle/SKILL.mdhas the install, the lane table, the one call, the JavaScript API and the traps in one page. In Claude Code:/plugin marketplace add Khoshkhah/lanestyle, then/plugin install lanestyle@lanestyle. - The docs as text:
llms.txtandllms-full.txt(every page, one file). - Changing lanestyle:
AGENTS.mdhas the layout, the commands and the project's rules.
More: AI agents.
License
MIT
Metadata
Release files for lanestyle 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| lanestyle-0.2.1.tar.gz | 51.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| lanestyle-0.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 92.2 kB
Release files / lanestyle-0.2.1.tar.gz
| Download URL | lanestyle-0.2.1.tar.gz |
|---|---|
| Size | 51.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e75e3feb9d1c1b2d69307eb1e3f40207801f035be78a5fd568ba6a34cd443308
|
|
BLAKE2b-256 checksum How to use checksums |
5dac80352b82240836020e1b4f6c775a6c67cc6d37ed03cb9b41071e441e2cb8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 3, 2026.
Transparency logRelease files / lanestyle-0.2.1-py3-none-any.whl
| Download URL | lanestyle-0.2.1-py3-none-any.whl |
|---|---|
| Size | 40.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
acf3fe0c8bc455e779aceb6cce51786b4a9578b53caa03d51ed1082b35284922
|
|
BLAKE2b-256 checksum How to use checksums |
2154f345ceb9b1efa631492722f8fa38889bd4112af00f8c2e82cfc4048a9162
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 3, 2026.
Transparency log