Direction arrow seems incorrect

Yes, those are the three static variables in estimatedHeading() that I was talking about. It figures the bearing from (oldLat, oldLon) to the current point and uses that as the current heading estimate. By the way, that call to GeoCoord::bearing() on line 556 shows the correct order of arguments, in contrast to the call on 680.

(That said, this is technically not the correct way to figure heading through two points. I think the really proper way is to take the bearing from the current point back to the previous point, then rotate 180 degrees. Not that the difference is important for this application.)

I think the only GeoCoord routine that we’re using here is GeoCoord::bearing(), right? That one seems pretty transparent, as long as we give it the arguments in the right order.