# openstreetmap-tools A collection of tools for working with OpenStreetMap public transport data. ## Tools ### osm-pt-geojson Fetch an OSM public transport route relation and list its stops, or export the route as GeoJSON. #### CLI usage ``` osm-pt-geojson list-stations osm-pt-geojson route-between [-o FILE] osm-pt-geojson full-route [-o FILE] ``` **List stops on a route:** ``` $ osm-pt-geojson list-stations 18892969 Route: Bus A1: Bristol Airport → Bristol Bus Station Stops (21): 1. Airport Terminal 2. Airport Tavern ... 21. Bus Station ``` **Export a segment between two stops as GeoJSON:** ``` $ osm-pt-geojson route-between 18892969 "Airport Terminal" "East Street" -o segment.geojson ``` **Export the full route as GeoJSON:** ``` $ osm-pt-geojson full-route 18892969 -o route.geojson ``` **Omit stop points from GeoJSON output:** ``` $ osm-pt-geojson full-route 18892969 --no-stops -o route.geojson ``` GeoJSON is written to stdout if `-o` is not given. #### Output format A GeoJSON `FeatureCollection` containing: - A `LineString` feature for the route geometry, with `name`, `ref`, `from`, `to`, and `route` properties from the OSM relation tags. - A `Point` feature for each stop, with a `name` property (omitted with `--no-stops`). #### Installation ``` pip install osm-geojson ``` Or from source: ``` git clone https://git.4angle.com/edward/openstreetmap-tools cd openstreetmap-tools pip install -e . ``` --- ### Web frontend An interactive map interface for browsing and downloading public transport routes as GeoJSON. #### Features - Enter a relation ID or OSM URL to load a route onto the map. - Click stops in the sidebar list or on the map to set start and end points. - Preview the selected segment highlighted on the map. - Toggle stop points in/out of the GeoJSON before downloading. - Download a segment or the full route as a `.geojson` file. - Entering a `route_master` ID shows all directions on the map with links to each individual route. - Bookmarkable URLs: `/` loads that route directly. #### Running the dev server ``` cd web flask --app app.py run ``` Open `http://127.0.0.1:5000`. #### API The web frontend exposes a JSON API. Full documentation is available at `/docs` when the server is running. | Endpoint | Description | |---|---| | `GET /api/route/` | Full route GeoJSON, stop list, and sibling routes | | `GET /api/segment/?from=NAME&to=NAME` | Segment between two named stops | | `GET /api/route_master/` | All member routes of a route_master | --- ## Licence MIT License. Copyright (c) 2026 Edward Betts.