About

LiveMap Routing is a Dropwizard-hosted GraphHopper plugin with three pedestrian product profiles (Fast / Calm / Safe) and a custom lm_* edge-attribute contract. The facade speaks POST /api/v1/routing/route; profile weights are inspectable on /profiles.

The routing contract

The routing engine

GraphHopper first finds a path through the street graph, then walks that path edge-by-edge to decide where a person needs a useful instruction. An instruction's interval in the response points array marks where the instruction starts in the geometry; the anchor index is what /map and /field-review snap markers to.

The five stages:

  1. Snap — user coordinates match the nearest usable edge.
  2. Query graph — snapped points become temporary nodes so routing can start mid-edge.
  3. Leg routing — one path per leg, then concatenated.
  4. Walk for guidance — every edge transition is inspected; an instruction is emitted only when the transition is likely to matter.
  5. Attach anchors — instructions get intervals against the final geometry.

Custom lm_* weights are applied request-time via custom_model — the foot_safety base profile encodes only access + speed; weights live on /profiles. (Decision-log 2026-04-09: foot_safety profile vs request custom_model.)

Guidance research highlights

Future cycles will measure these against walked annotations on golden routes.

Reference