02Route 3D Reference Manual
Comprehensive technical and operational manual for 3D multi-criteria routing, biomechanical simulation, spatial accessibility equity, and hardware-accelerated WebGL visualization inside QGIS.
1. System Overview & Architecture
02Route 3D is structured around a multi-tier pipeline designed for high performance and zero external Python dependencies:
- 1. Core Graph Engine: Builds 3D topological graphs draped with continuous elevation values from digital elevation models (DEMs). Features bicubic Catmull-Rom spline sampling, A* search, and Dijkstra wavefront propagation.
- 2. Analysis Tools: Sixteen analysis tools (routing, accessibility, network and data, reports and export) that run from the dock's 🧰 Tools tab as background tasks.
- 3. Studio GUI Dock: A 6-tab docked interface for interactive origin-destination picking, live profile switching, AHP weight matrix adjustment, and real-time canvas animation. Route calculation, the OD matrix and the OSM/DEM downloads run as QGIS background tasks: watch the progress and cancel them from the task bar at the bottom of the QGIS window. The dock remembers profiles, weights and playback settings; layer choices are saved with the project. Save Scenario writes points, profiles, weights and the route results to a
*.route3d.jsonfile; Load Scenario restores them and compares the saved run with the current (or next) routes. - 4. WebGL 3D Studio: A Three.js viewer that opens in your web browser from a local server started by the plugin (127.0.0.1 only). It shows the routes on real terrain sampled from the DEM you select in QGIS (or an approximate surface, labelled as such, without one), an elevation chart linked to the 3D walker, and a comparison of all computed profiles. New routes appear automatically. Keyboard: Space plays or pauses, the arrow keys move along the route, Home/End jump to its ends, R resets the view. Snapshot saves a captioned PNG at twice the screen resolution (Shift-click: four times); Record saves a captioned video. The standalone HTML export contains the same viewer and works offline.
2. Mobility Profiles Reference
The routing engine provides 15 rigorously calibrated mobility profiles categorized into Pedestrian, Micromobility, Vehicle, and Emergency modes:
| Key | Name | Category | Base Speed | Max Grade | Stairs Policy | Smoothness |
|---|---|---|---|---|---|---|
adult | Standard Adult | Pedestrian | 5.0 km/h | 25.0% | Allowed (1.2× penalty) | 0.2 |
senior | Senior / Elderly | Pedestrian | 3.2 km/h | 10.0% | Heavy Penalty (8.0×) | 0.6 |
child | Child / Safe Walk | Pedestrian | 3.5 km/h | 12.0% | Allowed (2.0×) | 0.4 |
stroller | Stroller / Pram | Pedestrian | 4.0 km/h | 6.0% | Strictly Blocked (100×) | 0.8 |
wheelchair | Wheelchair (ADA) | Pedestrian | 3.8 km/h | 5.0% | Strictly Blocked (1000×) | 0.9 |
jogger | Runner / Jogger | Pedestrian | 9.5 km/h | 20.0% | Allowed (1.5×) | 0.3 |
sightseer | Scenic / Panoramic | Pedestrian | 4.2 km/h | 20.0% | Allowed (1.0×) | 0.3 |
night_walk | Illuminated Night | Pedestrian | 4.8 km/h | 15.0% | Allowed (3.0×) | 0.7 |
bicycle | Commuter Bike | Micromobility | 18.0 km/h | 15.0% | Blocked (50×) | 0.6 |
mtb | Mountain Bike | Micromobility | 16.0 km/h | 28.0% | Allowed (5.0×) | 0.1 |
scooter | E-Scooter | Micromobility | 20.0 km/h | 12.0% | Blocked (100×) | 0.85 |
car | Passenger Car | Vehicle | 50.0 km/h | 25.0% | Blocked (1000×) | 0.5 |
delivery_van | Delivery Van | Vehicle | 42.0 km/h | 18.0% | Blocked (1000×) | 0.6 |
truck | Heavy Logistics | Vehicle | 40.0 km/h | 7.0% | Blocked (1000×) | 0.7 |
paramedic | Emergency EMS | Vehicle | 65.0 km/h | 22.0% | Blocked (1000×) | 0.4 |
3. Analysis Tools Catalog
All tools are in the dock's 🧰 Tools tab: pick a group, pick a tool, fill the form and press Run. A tool runs in the background (progress bar and Cancel), adds its result layers to the project and shows an Open button for the HTML or DXF file it wrote. Point A/B, DEM, road network, buildings, the last route and the selected profile are filled in from the dock; Use dock inputs re-applies them. The tools are not part of the QGIS Processing Toolbox.
1. zero2route3d:compute_3d_route (3D Least-Cost Route)
Calculates single-source shortest path using 3D node elevations. Outputs a LineStringZ layer with cumulative climb, energy expenditure, and slope attributes.
2. zero2route3d:generate_3d_isochrone (3D Isochrones)
Generates multi-tier temporal/metabolic catchments via anisotropic wavefront Dijkstra accounting for slope resistance.
3. zero2route3d:accessibility_equity_scorecard (E2SFCA Equity Score)
Calculates spatial equity scores for healthcare and amenity distribution with Gini coefficient, Lorenz curve, and Palma ratio.
4. zero2route3d:mcda_cost_surface (AHP Friction Surface)
Combines raster layers into a normalized friction surface using Saaty pairwise comparison weights.
5. zero2route3d:pareto_3d_routes (NAMOA* Pareto Routing)
Yields multiple non-dominated routes trading off travel duration, cumulative climb, heat exposure, and metabolic energy.
6. zero2route3d:map_match_3d_track (GPS 3D Map Matching)
Snaps noisy GPX tracks to the 3D road graph via Hidden Markov Models and Viterbi trellis dynamic programming.
7. zero2route3d:walkability_3d_audit (ADA Compliance Audit)
Audits pedestrian paths against ADA cross-slope and maximum gradient thresholds, highlighting non-compliant segments.
8. zero2route3d:emergency_evacuation_3d (Hazard Egress Routing)
Shortest egress routing from an origin to the nearest muster points across the real network.
9. zero2route3d:solar_shade_exposure (Sun / Shade Analysis)
Sun position for the chosen day of year and solar time along the route. With a building layer (footprints and a height field, or building:levels × 3 m) every 5 m of the route is tested for shadow by a ray toward the sun; without one, shade is estimated from the street orientation, and the method field says which was used. Terrain shadows are not computed. The 3D studio places its sun with the same formula (date and solar-time controls), so its building shadows match.
10. zero2route3d:batch_3d_routes (Batch Point-Pair Routing)
Calculates least-cost 3D paths for many origin-destination point pairs, paired in feature order.
11. zero2route3d:od_matrix_3d (3D OD Cost Matrix)
Computes N×M travel times, distances, and calorie matrices across the 3D network.
12. Tools tab: Route Scorecard (HTML Scorecard)
Generates a publication-grade HTML audit scorecard with embedded SVG elevation profiles.
13. Tools tab: AutoCAD DXF (AutoCAD DXF Exporter)
Exports 3D Polyline (AC1009) and longitudinal elevation profile drawings directly to DXF format.
14. Tools tab: Standalone 3D WebGL Report (Standalone 3D HTML)
Bundles the route data, Three.js and the viewer into a self-contained offline 3D WebGL viewer.
15. zero2route3d:audit_routing_network (Routing Network Readiness Audit)
Annotates every network segment with profile-specific access, surface quality, one-way status, weak-component membership, and overall connectivity diagnostics.
16. zero2route3d:transit_route_gtfs (Transit + Walk Route, GTFS)
Earliest-arrival journey by public transport and walking from a GTFS feed (zip), for a date and departure time, using the RAPTOR algorithm. Walking to the first stop, from the last stop, and walking all the way are routed on the street network with the chosen walking profile (slopes, stairs and access rules apply; the wheelchair profile uses only stops and trips the feed marks as accessible). Transfers use transfers.txt, or stops within 300 m. Output: one line per leg with route, stops, departure and arrival times. When walking is faster, the result is a single walk leg.
Also new in 0.9.0
Turn costs: vehicles, bikes, scooters, wheelchairs and strollers lose time at junction turns (left turns across traffic, sharp turns, U-turns; trucks cannot take hairpins). The delay is part of the travel time and reported as turn_s. Use the drive-on-left option where traffic keeps left. Departure time: with a departure hour, walkers and cyclists avoid unlit streets after dark and the heat weight follows the sun. Isochrones are the land within a corridor (default 50 m) of every reachable street, so blocks, rivers and rail lines stay outside. Solar exposure with a building layer computes real building shadows for the chosen day of the year.
4. Biomechanical Kinematics & Mathematical Formulations
02Route 3D uses peer-reviewed mathematical formulations rather than arbitrary penalty constants:
Tobler's Hiking Velocity Function
Predicts walking velocity based on fractional slope $s = \frac{\Delta z}{\Delta x}$:
Minetti 5th-Order Metabolic Energy Polynomial
Calculates energy expenditure $C_w(s)$ in Joules per kilogram per meter traveled:
Keys' Bicubic Convolution Spline ($a = -0.5$)
Ensures continuous first derivatives ($\mathcal{C}^1$) across discrete DEM raster pixels:
5. MCDA & AHP Friction Surface
zero2route3d:mcda_cost_surface combines up to three real input rasters — elevation (DEM), land surface temperature (LST), and a vegetation index (NDVI) — into a single normalized friction surface, from 0.0 (easiest to traverse) to 1.0 (hardest).
Inputs & weights
All three raster inputs are optional, but at least one is required. A missing layer is dropped from the weighting rather than replaced by an assumed value, and every supplied raster must share the same CRS, extent and pixel grid. Each criterion carries a weight on the Saaty 1–9 scale, resolved through an AHP pairwise comparison matrix:
| Criterion | Parameter | Default weight |
|---|---|---|
| Slope (from DEM) | WEIGHT_SLOPE | 5.0 |
| Heat avoidance (from LST) | WEIGHT_HEAT | 3.0 |
| Green preference (from NDVI) | WEIGHT_GREEN | 2.0 |
Consistency ratio
The pairwise matrix's consistency ratio is computed and reported in the processing log:
CR > 0.10 — the judgment matrix is too inconsistent to trust, and the algorithm will not silently produce a surface from contradictory weights.6. NAMOA* Pareto Frontier Routing
zero2route3d:pareto_3d_routes generates non-dominated alternative routes between one origin and one destination, trading off four objectives at once: travel time, cumulative climb (slope), thermal heat exposure, and metabolic energy (calories).
What "non-dominated" means
A route belongs to the Pareto frontier only if no other candidate route beats it on every objective simultaneously. The result is a small set of genuinely different trade-offs — for example a fastest-but-steepest route alongside a longer-but-flatter one — rather than one single "best" answer that hides the trade-off from the user.
Inputs
- Origin & Destination Points Layer: a 2-point vector layer.
- Road Network (optional): an existing line layer; falls back to a bounded OpenStreetMap download when omitted.
- Elevation (DEM) and Thermal Heat (LST) layers (both optional): missing rasters simply drop that objective's contribution rather than being estimated.
- Mobility Profile: any of the 15 profiles from §2, applied identically to every alternative on the frontier.
Output is a single LineStringZ layer holding every non-dominated alternative, computed by the NAMOA* multi-objective search in core/pareto_router.py.
7. WebGL Studio
Every computed route can be opened in a GPU-rendered Three.js 3D viewer in your web browser — the "WebGL Studio" — for visual inspection beyond what the QGIS 2D canvas shows.
Camera modes
| Mode | Behaviour |
|---|---|
| Orbit | Free 360° inspection camera (Three.js OrbitControls), the default mode. |
| Chase | Follows the mobility-profile avatar along the route with damped trailing motion. |
| POV / Driver | First-person viewpoint riding the route itself. |
| Tour | Cinematic flight path that orbits the route as it progresses, for walkthrough recordings. |
Studio features
- Kinematic avatar rig (
KinematicAvatarRig.js): a procedural 3D figure that matches the active mobility profile — walker, wheelchair, stroller, cyclist, scooter, car, van or ambulance. - Subsurface terrain slicer (
TerrainSlicerSystem.js): a clip-plane tool to slice through the 3D terrain mesh and inspect the elevation profile beneath the route. - Voice cue system (
VoiceCueSystem.js): Web Speech API turn-by-turn spoken navigation with gradient warnings, entirely offline/on-device. - Media capture: PNG screenshot export and WebM video recording directly from the 3D canvas.
- Sun & shadows (
solar.js): a date and a solar-time control place the sun for the route's latitude with the same formula as the Solar & Shade Exposure algorithm, so building and tree shadows in 3D match the computed shade. Below the horizon the sun light switches off. A link can fix the sun with?sun=172,15(day of year, solar hour).
8. Data Formats & Interoperability
Route results leave 02Route 3D through a mix of Studio dock quick-export buttons and dedicated tools in the Tools tab:
| Format | How | Notes |
|---|---|---|
LineStringZ | Native QGIS vector layer | The result of every routing algorithm; usable directly in QGIS or exported via QGIS's own "Save As". |
| GPX 1.1 | Dock 💾 GPX button | GPS Exchange Format with elevation, for handheld GPS units and GPX-aware apps. |
| GeoJSON 3D | Dock 💾 GeoJSON button | 3D-coordinate GeoJSON for web maps and lightweight GIS tools. |
| AutoCAD DXF | Tools tab: AutoCAD DXF | AC1009-standard 3D Polyline plus a longitudinal elevation profile drawing; opens in AutoCAD, Civil 3D, Rhino and SketchUp. |
| Standalone 3D HTML | Tools tab: Standalone 3D WebGL Report | Self-contained, offline-capable HTML file with an embedded Three.js viewer — no server or QGIS needed to view it. |
| HTML scorecard | Tools tab: Route Scorecard | Publication-grade analytical report with embedded SVG elevation profiles. |
9. Running the Tools
Open the dock, switch to 🧰 Tools, choose a group (Routing, Accessibility, Network and data, Reports and export) and a tool. ℹ️ About this tool shows what it computes. Pick start and end points with the canvas picker next to each point field, or leave the values the dock filled in from Point A and B.
- Output layers are added to the project when the run finishes; leave an output on Create temporary layer or choose a file.
- HTML and DXF outputs get an Open button under the progress bar.
- Cancel stops a running tool; the log under the form lists warnings and errors.
The tools are not registered with the QGIS Processing framework, so they are not available in the Processing Toolbox, the Graphical Modeler or processing.run().
10. Troubleshooting & FAQ
Q: Does 02Route 3D require external pip dependencies?
No. 02Route 3D is designed strictly using core QGIS (PyQt, qgis.core, qgis.gui, the Python standard library) and has zero pip dependencies.
Q: How does the plugin handle areas without a local DEM?
Use the "⛰️ Fetch Full Map Extent Elevation DEM" button in the dock. It samples elevation for the map extent from the free Open-Elevation API on a grid of about 30 m (coarser on large extents, which the dock reports before downloading). The service is SRTM-based and its own resolution is coarser than the grid, so small relief is interpolated; it is not a Copernicus product. For street-level work load a local DEM as a QGIS layer instead.
Q: Are the 3D exports compatible with CAD software?
Yes. The DXF exporter produces AC1009 standard 3D Polylines that open natively in AutoCAD, Civil 3D, Rhino, and SketchUp with real elevations.
11. Research Inspiration & Citations
Inclusive UX Mobility Inspiration
The persona-based, multi-profile user experience in 02Route 3D is inspired by the research and methodology of Transform Transport / Systematica:
🌐 Transform Transport: UX-Mobility Multi-User Walkability Route Planner
Academic Citations
- Tobler, W. (1993). Three Presentations on Geographical Analysis and Modeling. NCGIA, Tech Report 93-1.
- Minetti, A.E. et al. (2002). Energy cost of walking and running at extreme uphill and downhill slopes. J. Appl. Physiol., 93(3), 1039-1046.
- Keys, R.G. (1981). Cubic convolution interpolation for digital image processing. IEEE Trans. ASSP, 29(6), 1153-1160.
- Saaty, T.L. (1980). The Analytic Hierarchy Process. McGraw-Hill.
- Luo, W. & Qi, Y. (2009). An enhanced two-step floating catchment area (E2SFCA) method. Health & Place, 15(4), 1100-1107.