// the find
jagodki/Offline-MapMatching
a QGIS-plugin for matching a trajectory with a network using a Hidden Markov Model and Viterbi algorithm
A QGIS plugin that snaps a GPS trajectory onto a road/path network using a Hidden Markov Model scored with the Viterbi algorithm, instead of naive nearest-edge snapping. Aimed at GIS people doing offline (post-hoc) trajectory cleanup — survey data, GPS tracks, transport research — who need something better than snap-to-nearest-line.
The README documents the actual math (emission probabilities from GNSS error distribution, transition probabilities from Newson & Krumm's exponential distance/direction model, the candidate graph construction) with citations, not just a feature list — you can actually verify what it's doing. The code is split cleanly into hidden_states/observation/mm_processing, so the HMM/Viterbi core is at least conceptually separated from the QGIS processing-framework glue. It exposes three separate algorithms (match, clip network, reduce density) through QGIS's processing API, so it's callable from the Python console and scriptable, not GUI-only. From v3.0.0 it derives std-deviation and transition-weight parameters from the search distance automatically instead of leaving two opaque magic numbers for the user to hand-tune.
No commits since August 2020 — that's 5+ years with zero activity, so it almost certainly doesn't run against current QGIS 3.x without patching (API churn in QGIS's processing and geometry modules is not gentle). There's no test suite anywhere in the tree, which is a real problem for something this sensitive to three interacting tuning parameters (search distance, std deviation, beta) — no regression protection if someone touches the probability math. The Viterbi/HMM core is coupled directly to QGIS's own network-analysis Dijkstra implementation, so you can't lift the matching logic out and use it as a standalone library outside QGIS. The README admits computation time explodes with network segmentation and search distance but gives no actual complexity numbers or benchmarks, just rule-of-thumb advice.