If you are gonna share it let me know.
I'm following this closely and I'm curious to know what we can do to support you.
Also, it would be great if this feature were a built-in traccar feature.
Perhaps it could also be used for route lines on the livemap? (WebLiveRouteLength)
To everyone, I hope you're having a wonderful day.
I apologize for the delay in responding.
I am currently implementing Phase 2 of the integration using the drift filter + match/v1 API.
The test results have been quite good.
In this implementation, there are two approaches: using match/v1 as the primary router and route/v1 as the fallback, with several conditional parameters, including confidence calculations by using a Hidden Markov Model algorithm (HMM)
Workflow
└→ RouteReportProvider.getExcel()
└→ OsrmClient.calculateRoute() → snapped positions
OsrmMatchClient.matchRoute() ← match/v1 + HMM
│ └─ fallback: OsrmClient.calculateRoute() ← route/v1 + drift filter
└─ (if match disabled) OsrmClient.calculateRoute()
LOG :
- v2 OsrmMatchClient OsrmClient fallback minconfidence=1.0
2026-05-01 20:15:09 INFO: OSRM MatchClient initialized: url=https://sirius.domain:5000, profile=driving, minConfidence=1.00
2026-05-01 20:17:10 INFO: RouteReportProvider: using OsrmMatchClient (match/v1) as primary router
2026-05-01 20:17:10 INFO: MatchClient: 15/48 tracepoints dropped by HMM: [0, 1, 2, 3, 4, 6, 15, 16, 28, 29, 32, 33, 43, 46, 47]
2026-05-01 20:17:10 INFO: MatchClient: segment [0] confidence=0.7148 < 1.00 — skip segment
2026-05-01 20:17:10 INFO: MatchClient: segment [1] confidence=0.0002 < 1.00 — skip segment
2026-05-01 20:17:10 INFO: MatchClient: segment [2] confidence=0.9784 < 1.00 — skip segment
2026-05-01 20:17:10 INFO: MatchClient: segment [3] confidence=0.0000 < 1.00 — skip segment
2026-05-01 20:17:10 WARN: MatchClient: all segments below confidence threshold — fallback
2026-05-01 20:17:10 INFO: MatchClient: executing fallback to OsrmClient (route/v1)
2026-05-01 20:17:10 INFO: Drift filter: 14/48 positions dropped, 34 passed
- v2 OsrmMatchClient OsrmClient fallback minconfidence=0.5
2026-05-01 19:43:08 INFO: OSRM MatchClient initialized: url=https://sirius.domain:5000, profile=driving, minConfidence=0.50
2026-05-01 19:43:08 INFO: RouteReportProvider: using OsrmMatchClient (match/v1) as primary router
2026-05-01 19:43:09 INFO: MatchClient: 15/48 tracepoints dropped by HMM: [0, 1, 2, 3, 4, 6, 15, 16, 28, 29, 32, 33, 43, 46, 47]
2026-05-01 19:43:09 INFO: MatchClient: segment [1] confidence=0.0002 < 0.50 — skip segment
2026- v2 OsrmMatchClient OsrmClient fallback minconfidence=1.0
2026-05-01 20:15:09 INFO: OSRM MatchClient initialized: url=https://sirius.domain:5000, profile=driving, minConfidence=1.00
2026-05-01 20:17:10 INFO: RouteReportProvider: using OsrmMatchClient (match/v1) as primary router
2026-05-01 20:17:10 INFO: MatchClient: 15/48 tracepoints dropped by HMM: [0, 1, 2, 3, 4, 6, 15, 16, 28, 29, 32, 33, 43, 46, 47]
2026-05-01 20:17:10 INFO: MatchClient: segment [0] confidence=0.7148 < 1.00 — skip segment
2026-05-01 20:17:10 INFO: MatchClient: segment [1] confidence=0.0002 < 1.00 — skip segment
2026-05-01 20:17:10 INFO: MatchClient: segment [2] confidence=0.9784 < 1.00 — skip segment
2026-05-01 20:17:10 INFO: MatchClient: segment [3] confidence=0.0000 < 1.00 — skip segment
2026-05-01 20:17:10 WARN: MatchClient: all segments below confidence threshold — fallback
2026-05-01 20:17:10 INFO: MatchClient: executing fallback to OsrmClient (route/v1)
2026-05-01 20:17:10 INFO: Drift filter: 14/48 positions dropped, 34 passed
- v2 OsrmMatchClient OsrmClient fallback minconfidence=0.5
2026-05-01 19:43:08 INFO: OSRM MatchClient initialized: url=https://sirius.domain:5000, profile=driving, minConfidence=0.50
2026-05-01 19:43:08 INFO: RouteReportProvider: using OsrmMatchClient (match/v1) as primary router
2026-05-01 19:43:09 INFO: MatchClient: 15/48 tracepoints dropped by HMM: [0, 1, 2, 3, 4, 6, 15, 16, 28, 29, 32, 33, 43, 46, 47]
2026-05-01 19:43:09 INFO: MatchClient: segment [1] confidence=0.0002 < 0.50 — skip segment
2026-05-01 19:43:09 INFO: MatchClient: segment [3] confidence=0.0000 < 0.50 — skip segment
2026-05-01 19:43:09 INFO: MatchClient: match complete — 2 segments accepted, 252 positions, 15 dropped-05-01 19:43:09 INFO: MatchClient: segment [3] confidence=0.0000 < 0.50 — skip segment
2026-05-01 19:43:09 INFO: MatchClient: match complete — 2 segments accepted, 252 positions, 15 dropped
- OSRM `route/v1` provides an interpolated path (not an exact GPS match),
accuracy depends on the density of OSM map data in that area
- OSRM `/match/v1` is specifically designed for GPS traces using a Hidden Markov Model, it can detect and ignore coordinate outliers.
- `match/v1` used to reduce or correct GPS drift caused by certain factors, which can reduce the accuracy of the actual position
- `confidence > 0.5` Match works well with timestamps — optimal hierarchical implementation. OSRM automatically drops drift points (null tracepoints) using HMM; the confidence score indicates how confident it is in the results.
- `confidence > 0.5` → implement hierarkis match-first + fallback route
- `confidence < 0.1` → keep the existing route/v1 + drift filter, since this device's trace is indeed too noisy for an HMM
may be not yet for WebLiveRouteLength for now focus on the current report area
I’ll be releasing this patch on my GitHub soon.
It might be useful for those who need it.
have a look at https://www.traccar.org/forums/topic/integration-method-with-osrm-routing-engine/
I hope this is helpful
Here are the results of the tracking backend and UI integration with the OSRM-Backend engine.
In this development, it is currently only used to “display routes snapped to roads only”; the data remains in Haversine algorithm.