openstreetmap-tools/README.md
Edward Betts 53aab8c4bc Add web optional dependency and update docs
Flask is now declared under [project.optional-dependencies] as the
`web` extra, so `pip install osm-geojson[web]` installs both the CLI
and Flask. The `dev` extra includes Flask too so the test/dev venv
gets everything. Update README and AGENTS.md accordingly.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-27 20:05:14 +00:00

112 lines
2.7 KiB
Markdown

# 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 <relation_id>
osm-pt-geojson route-between <relation_id> <from_station> <to_station> [-o FILE]
osm-pt-geojson full-route <relation_id> [-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: `/<relation_id>` loads that route directly.
#### Running the dev server
```
pip install -e ".[web]"
flask --app web/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/<id>` | Full route GeoJSON, stop list, and sibling routes |
| `GET /api/segment/<id>?from=NAME&to=NAME` | Segment between two named stops |
| `GET /api/route_master/<id>` | All member routes of a route_master |
---
## Licence
MIT License. Copyright (c) 2026 Edward Betts.