This post is a short followup to last month's “The Scourge (or Beauty) of “Snap To Road” with iPhone Location-Tracking Apps”, in which I explained how an attempt by Apple to make the iPhone location services more relevant for car navigation can end up destroying the accuracy for other uses such as geoencoding or fitness tracking. When enabled, the user's location is “snapped” to the center of the nearest road; internally Apple calls it “Map Matching”; I call it “Snap to Road”.
In the screenshot of Google Earth seen above, the red line, recorded with the “Snap to Road” feature disabled, mostly matches up with my green-line actual path (which I drew on the map by hand from memory), but the cyan line, recorded with “Snap to Road” enabled, is ridiculously devoid of detail... it makes it appear as if I was walking down the exact center of each road; you can't see what side of the road I was on, nor even that there are turns at the edges.
Unfortunately, this iOS feature can not simply be enabled or disabled by the user or the app developer — Apple, in its infinite wisdom, chooses when it goes on and off and does not share any details (or even confirm that it happens!) — so I wanted to do more testing to understand when it does or doesn't become enabled.
Evgen Bodunov, the developer of the most-excellent Galileo Offline Maps, kindly made a special version of his app for me which allowed me to explicitly choose the iOS CoreLocation service “Activity Type”. I did a bunch of riding around with the phone set to various situations, and came up with a few more details...
“Snap to Road” is tripped on when you exceed 20kph (12mph).
In the screenshot, notice how the cyan line matches the actual track near the start of the ride, then halfway up the “T” it snaps to the center of the road. That's when my speed crested 20kph after riding slowly from the starting point.
I'm not sure under what conditions it turns back off; merely slowing down to below that threshold is not sufficient to turn it back off, as I could continue at a walking pace for several minutes and it would not turn off.
In some tests merely pausing or changing direction turned it off, but in other tests seemingly-similar actions did not turn it off. This remains a mystery.
iOS seems to require Internet access (or cached map data) for it to work.
I disconnected my phone from the Internet (turned on airplane mode and turned off WiFi) and rebooted the phone, and I could not get the “Snap to Road” to kick in, even at fairly high speeds.
In particular, it doesn't seem to use data cached in the built-in "Maps" app, which still displays its cached data in airplane mode.
However, upon exiting airplane mode, “Snap to Road” kicked in the next time I exceeded 20kph.
The “OtherNavigation” activity type is the only CoreLocation activity type that does not invite “Snap to Road” on its own.
This is a confirmation of what I reported previously, that even at high speeds, “Snap to Road” remain thankfully disabled with OtherNavigation. The other three activity types all get “Snap to Road” at 20kph.
(However, there's still the caveat that if any app triggers “Snap to Road”, all apps get “Snap to Road”.)
As expected, I've not heard any reply from Apple on the bug report I submitted.