private boolean needsRepaintForHeading(final UnifiedMapViewModel viewModel, final boolean usesPreciseAutorotation) {
        final LocationWrapper locationWrapper = viewModel.location.getValue();
        if (locationWrapper == null) {
            return true;
        }
        return Math.abs(AngleUtils.difference(currentHeading, locationWrapper.heading)) > (usesPreciseAutorotation ? MIN_HEADING_DELTA_PRECISE_AUTOROTATION : MIN_HEADING_DELTA);
    }
Repaint position overlay but only with a max frequency and if position or heading changes sufficiently.
main/src/main/java/cgeo/geocaching/unifiedmap/LocUpdater.java