Every single mapping app has to implement some kind of mapmatching, since you can't rely on the GPS sensors to always be accurate: the GPS position is frequently wrong when you're moving between cell towers , and can be lost for several seconds in cities. Nokia/HERE's implementation (which I was told was very similar to tomtom/garmin's implementation) was written more than a decade ago, and IIRC, every time it encounters a fork in your path, it projects your position on every alternate for a few seconds and chooses the one that best matches the current gps+compass+accelerometer data as your "current" route. The output of this algorithm (which btw is hideously incomprehensible -- I'm talking old c++ with almost no comments) is what is used for map viewing/routing/guidance... the pure gps signal is never used as-is.