Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

overture2osrm

CI License: MIT

Route on Overture Maps data with the unmodified OSRM toolchain. One Rust CLI converts an Overture extract into an OSM PBF; osrm-extract and the stock car.lua take it from there. No Docker and no intermediate database needed.

It uses Overture's road segments and the infrastructure theme and performs pretty well against OSM. Tested for a few spots in Western Europe where Overture is usually just slightly slower than OSM data (<1%). Some caveats apply: no ferries nor trains yet and be aware of temporary speed limits or access restrictions etc. See the report.md file for the creation process and other nits.

uvx --from overturemaps overturemaps download \
    --bbox 8.44,47.32,8.63,47.44 -f geoparquet -t segment        -o zurich_segments.parquet
uvx --from overturemaps overturemaps download \
    --bbox 8.44,47.32,8.63,47.44 -f geoparquet -t infrastructure -o zurich_infra.parquet

cargo build --release --manifest-path overture2osrm/Cargo.toml
./overture2osrm/target/release/overture2osrm build zurich_segments.parquet \
    --infrastructure zurich_infra.parquet -o zurich.osm.pbf

osrm-routed --algorithm mld -p 5001 zurich.osrm
curl 'localhost:5001/route/v1/driving/8.5402,47.3779;8.5622,47.4502?overview=false'
image

Some benchmarks

All of Switzerland (2.85 M segments → 30.2 M nodes), against an OpenStreetMap graph built from the same area with the same OSRM version and profile:

conversion, GeoParquet → PBF 1.43 s — less than osmium cat needs to copy the file it wrote
ready to route (+ OSRM preprocessing) 43 s
distance vs OSM, 400 city pairs median 1.0000, 80 % within 1 %
duration vs OSM median 1.0124 city, 0.9989 intercity
determinism byte-identical across runs and thread counts

Overture's rules are translated into the vocabulary the stock profiles already read: oneways from heading-scoped access denials, turn restrictions from prohibited_transitions (via-node and via-way), height/weight limits from dimension-scoped denials, and traffic signals, stop lines and barriers from the separate infrastructure theme — matched to the graph by coordinate, since Overture publishes no key between the two.

Repository

overture2osrm/ the CLI — install, flags, benchmarks, schema mapping, limitations
report.md the full write-up: schema archaeology, design decisions, validation, the bug it caught, and how the obstacle matching was verified
frontend/ local web UI over the same pipeline: draw a bbox, watch each step run, click two points, compare against OSM, switch between fastest and shortest
bench/ the scripts behind every measured claim: routing comparison, obstacle matching, census, and a pyarrow baseline

Requirements

  • Rust 1.85+ (cargo build --release) — the floor comes from the dependency tree (arrow/parquet 1.84, clap 1.85)
  • OSRM: brew install osrm-backend, apt install osrm-backend, or the official Docker image — any recent build works, nothing is patched
  • uv for the data download and the frontend (both use inline script metadata, so there is no environment to manage)
  • osmium-tool, optional, for validating output

Data licensing

Overture's transportation and infrastructure themes are derived from OpenStreetMap and carry ODbL obligations: anything you publish from a converted graph needs the same attribution and share-alike terms as OSM-derived data. This repository's code is licensed separately (see LICENSE); the data it processes is not covered by it.

About

Route on Overture Maps data with the unmodified OSRM toolchain — a Rust CLI that converts Overture GeoParquet to OSM PBF (all of Switzerland in 1.4 s)

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages