How we calculate safe, efficient cycling routes across Victoria
This page documents our current production routing implementation running on GraphHopper 10.2. The algorithm has been deployed and refined based on real-world testing and feedback from the Victorian cycling community.
VicBUG uses a sophisticated dual-layer color-coding system that shows infrastructure quality at a glance. Routes dynamically change colors per-segment based on the actual bike infrastructure present.
Visual cues: Solid lines indicate higher protection, while dashed lines show minimal or intermittent infrastructure.
Highest safety level. Includes protected lanes with physical barriers, separated cycleways, and car-free paths.
GraphHopper tags: cycleway, separated, track, shared_path, sidepath
Good protection. Painted buffer zone provides separation between cyclists and motor vehicles.
GraphHopper tags: buffered_lane, lane_buffered
Moderate protection. Standard painted lanes without buffer. Dashed line indicates minimal physical separation.
GraphHopper tags: lane, designated, basic_lane
Minimal protection. Lanes shared with parking or buses. Dashed line indicates intermittent availability.
GraphHopper tags: shared_lane, share_busway, shared, shared_parking
No bike infrastructure. Quiet, low-traffic residential streets and service roads.
Road types: residential, service, tertiary, living
Use with caution. Arterial roads, state highways, and primary routes with heavy traffic.
Road types: primary, secondary, trunk, state road
Routes intelligently change colors based on infrastructure transitions. A single route might show green for a protected path, then switch to cyan for a buffered lane, then orange for a residential street - all automatically color-coded to show you exactly what type of infrastructure you'll encounter on each segment.
When bike infrastructure data is unavailable, routes fall back to road class-based coloring. This ensures all routes are color-coded for safety, even without infrastructure details.
Note: Infrastructure-based colors (above) take priority when available. These colors only apply to segments without bike infrastructure data.
Car-free paths, trails, shared trails, bridleways, singletracks
Residential, service, tertiary, living streets, unclassified roads
Pedestrian-only paths, generally not legal for cycling
Primary, secondary, trunk, motorway, state roads, steps - use with caution
Our routing engine uses a single, carefully-tuned profile powered by GraphHopper 10.2 that intelligently prioritizes cycling infrastructure while respecting legal and safety requirements.
"Smart routing that prefers protected infrastructure while keeping routes practical and legal"
Our algorithm intelligently weighs different types of bike infrastructure to find routes that maximize safety without creating impractically long journeys. The system uses precise multipliers to balance infrastructure quality with travel efficiency.
All route segments are rendered with a sophisticated two-layer system for maximum clarity:
This dual-layer approach ensures routes are visible at all zoom levels while maintaining visual hierarchy through the solid/dashed pattern system.
GraphHopper Profile: bike |Custom Model: bike_custom.json
Bikes respect oneway=yes tags just like cars, preventing dangerous wrong-way routing on divided roads and busy streets.
This critical safety feature ensures the routing engine never suggests illegal or dangerous wrong-way navigation on one-way streets.
Footpaths are heavily penalized (0.01× multiplier) to avoid illegal routing while allowing minimal necessary connections.
Routes respect Victorian cycling laws by avoiding footpaths except where they legally function as shared paths or when no other connection exists.
All surfaces (paved, gravel, dirt, unpaved) are treated equally with no penalties, ensuring access to Victoria's extensive gravel and rail trail network.
The routing engine doesn't discriminate against unpaved paths, making it ideal for touring and adventure cycling on rail trails and mixed-surface routes.
MMAP-based elevation data provides accurate route profiles showing climbs and descents, helping you plan for hills on your ride.
Elevation profiles are displayed in the route planner, showing total ascent/descent and the gradient profile throughout your journey.
Roads aren't uniform - a single street might have protected lanes on one section and no infrastructure on another. Our per-segment profiling analyzes infrastructure changes within individual roads:
This granular approach ensures routes don't just look at road names, but understand the actual riding experience on every segment - critical for accurate navigation in Victoria's mixed infrastructure network.
User preferences for elevation: avoid hills, prefer flat routes, or don't care. Balancing elevation gain with route distance.
Fine-tuning the weight multipliers for each infrastructure type based on real-world user feedback and GPS trace data.
Incorporating community-reported hazards, construction, and seasonal conditions into routing decisions to avoid problem areas.