Geospatial & Location ServicesMap Matching & RoutingHard⏱️ ~3 min

Map Matching Failure Modes in Production

Production map matching systems face a catalog of edge cases that degrade accuracy and cause downstream failures if not handled explicitly. Urban canyons between skyscrapers create multipath reflections where GPS signals bounce off buildings, causing sudden jumps of 50 to 100 meters. The HMM can misassign vehicles to parallel roads or the wrong level on stacked highway interchanges. Emission probabilities must downweight pings with reported accuracy worse than 50 meters and apply heading consistency checks, but ambiguity persists when roads are within 20 meters of each other. Sparse or missing pings from background app termination or network dropouts create gaps of minutes. The HMM collapses to single point decisions, and transitions become unconstrained. Routing algorithms fill gaps using shortest path on the road graph, which may not match the actual route taken. For example, a 5 minute gap might be filled with a highway route when the driver took surface streets. Systems must flag these inferred segments with low confidence scores and mark distances as estimates for billing systems. At Uber scale with 10,000 vehicles, even a 1% missing data rate means 100 simultaneous gaps requiring fallback logic. Stationary jitter is insidious. Devices at rest emit scattered pings within tens of meters due to satellite geometry changes. Naive distance sums can inflate a parked vehicle's trip by hundreds of meters per hour. Filtering must detect speed below 2 meters per second and collapse spatial clusters within 20 meters. The HMM should include an explicit stop state to avoid matching stationary jitter to nearby road movement. Map data quality issues compound everything: OpenStreetMap may have missing turn restrictions, closed private roads, or misclassified one way streets, causing the matched path to include impossible segments that downstream navigation cannot execute.
💡 Key Takeaways
Urban canyons cause 50 to 100 meter GPS jumps from multipath reflections, misassigning vehicles to parallel roads when edges are within 20 meters of each other
Missing ping gaps from app termination require routing to infer paths, but shortest path may not match actual route: highway assumed when driver took surface streets
Stationary jitter at rest scatters pings within 20 meters, inflating distance by 100+ meters per hour if not filtered by speed threshold below 2 meters per second
OpenStreetMap quality issues like missing turn restrictions or closed roads cause impossible matched paths that downstream navigation cannot execute
At Uber scale with 10,000 vehicles and 1% missing data rate, 100 simultaneous gaps require fallback logic and confidence scoring for billing systems
API batch boundaries at 100 or 400 point limits force splitting long trajectories, causing Viterbi discontinuities unless windows overlap and reconcile
📌 Examples
A vehicle parked for 30 minutes with GPS jitter within 20 meters can accumulate 50 meters of false distance if speed filtering does not detect stationary state
A 5 minute ping gap filled by shortest path routing assumes highway when driver actually took scenic route, overcharging by 2 kilometers
Stacked highway interchange with roads vertically separated by 10 meters but horizontally aligned causes HMM to flip between levels with each noisy ping
OpenStreetMap missing one way restriction allows matched path through illegal turn, causing navigation to give impossible instruction that confuses driver
← Back to Map Matching & Routing Overview