More Details on the Insidious iOS Snap-to-Road “Feature”

More iPhone Location-Track Testing

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 (Name changed Feb 2019 to Guru 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.


All 15 comments so far, oldest first...

That’s excellent research. However I’m confused about the Airplane Mode, in my experience Airplane mode also disables GPS.
(Note: Just researched this while typing it up. Airplane Mode disabled GPS in iOS 8.2 and earlier [source].)

Doing some brief research I wasn’t able to tell when the map matching feature was introduced.

The Snap-to-Road stuff started ruining my tracks when I upgraded to iOS9, but it’s been reported much earlier, so I take it that the iOS9 connection is related to when Apple got related map data for Kyoto. Just a guess, though. —Jeffrey

— comment by Pablo on January 19th, 2016 at 11:48pm JST (8 years, 2 months ago) comment permalink

Oh come one, please, … map matching is nothing special or new. In fact its a fundamental basic for road navigation. Turning it on if your speed exceeds 20kph seems to make sense, too. This is nowhere near a bug, …

Did you even read the article? —Jeffrey

— comment by Nick on January 25th, 2016 at 4:32pm JST (8 years, 2 months ago) comment permalink

So it seems like Apple wants to make sure you’re on a car before enabling it.

It seems that they don’t want to make sure, because if they did they would ask. One can go 30kph on a bicycle, horse, while windsurfing…. all things that are NOT in a car but for which snap-to-road would kick in and destroy the track. And even if you ARE in a car, their stupid algorithms destroy the track at some intersections you stop at. Like so much from Apple in the last 5ish years, it’s a nice idea very poorly thought out, but still shoved down our throats. )-: —Jeffrey

— comment by Francis Kim on January 27th, 2016 at 10:14pm JST (8 years, 2 months ago) comment permalink

Apple seems to suffer from the cargo cult of simplicity.
They seem to view UI simplicity as the goal instead of viewing it as the end result of elegant design choices. Simplicity for the user is something you earn by making good design choices, it’s the end of a long arduous process. If you shortcut that, you don’t actually end up with something that is simple to use. You end up with something that looks easy to use but is actually very hard to use.
By failing to arrive at clean interfaces the hard way, they make their tools frustratingly inconsistent and difficult to use. Functionality is abstracted away from the user, but there is no consistent process by which the user can predict how to access these functions from program to program, or across the product line.

— comment by neil lopez on January 29th, 2016 at 1:45am JST (8 years, 2 months ago) comment permalink

“I’ve not heard any reply from Apple on the bug report” – you probably won’t. Apple is way too busy working on new products. I too reported an issue or bug – did I hear from them? All I hear are cricket sounds in the background!!

— comment by Antonio Espino on February 1st, 2016 at 6:38am JST (8 years, 2 months ago) comment permalink

I haven’t dealt with Apple bug reports, is there a way this can be upvoted?

I’m so glad I found this because I opened a support ticket with an app vendor blaming them, however it took me over a year to discover what was happening and I just put it together this weekend.

— comment by Michael on March 9th, 2016 at 3:41am JST (8 years ago) comment permalink

So glad I have found an article on this. Some parts of my rides when I record with Strava are constantly being snapped, and not just to roads, one particular segment that goes along side a railway line gets snapped to that.
When I rode the other week with a friend he said he had run out of mobile data so I said it’s fine, Strava will work. I had data switched on. We both rode the same route, mine snapped to the railway line, his followed the road perfectly.

Now I am in a quandary as I want to have the data on for the maps to refresh so I can navigate new routes, I can’t use airplane mode as bluetooth will turn off and my heart rate monitor won’t work.

I have told Strava and they say it’s an increasing problem.

Another thing I noticed is that the more I seem to ride an area the more it will snap, maybe there is some kind of memory?

— comment by Michael Stokes on June 9th, 2016 at 6:00pm JST (7 years, 9 months ago) comment permalink

This appears to be resolved for me now. I didn’t notice it after the last update, I wonder if it was happening server side.

“Resolved” meaning that you’re not seeing the roadsnap where you used to? After 9.2.2? —Jeffrey

— comment by Michael on June 16th, 2016 at 3:22am JST (7 years, 9 months ago) comment permalink

Well I tested it briefly on the freeway the day I posted that and it was not snapping to roads for the short tests I ran. Yesterday I ran a test in a car at mostly high speed and it’s a mixed bag. Sometimes it snapped, sometimes it didn’t as far as I can tell there’s no rhyme or reason to the snap/unsnap parts.

https://ridewithgps.com/trips/9806134

P.S. I forgot to check the notification box last time.

— comment by Michael on July 7th, 2016 at 5:58am JST (7 years, 8 months ago) comment permalink

Just want to say thanks for this info. As a cyclist and user of several gps apps that require accuracy, snap to road drives me crazy! We need more apps that allow us to toggle this “feature”!

— comment by Derek on October 20th, 2016 at 6:23am JST (7 years, 5 months ago) comment permalink

This seems to be resolved. It seems there might be a block or two where it snaps, but the last 30 mile ride I did seemed just fine now. Would like to know if everyone else is getting the same results.

It’s still a very big problem for me. Because of it I don’t use the iPhone as the primary recording device, but I used the iPhone for navigation in Osaka City a week ago, and the “snap to” sometimes made it impossible to figure out exactly where I was, as the location jumped around among nearby roads (roads that I didn’t know and I was looking at the iPhone to figure out which I was on). It was maddening. —Jeffrey

— comment by Michael on February 20th, 2017 at 4:32am JST (7 years ago) comment permalink

I assume you’re on the latest version of iOS? I’m using a 7 plus now, I seriously doubt it’s hardware related. I used RideWithGPS which certainly may call on a different navigation type than the navigation app you were using. If that’s the case, app developers have a hard set of choices when it comes to deciding what calls their apps make for what their users may need.

The problem is that other seemingly-unrelated apps can change the data that your track-recording app gets. It’s a monumentally stupid situation that goes against best practices (and common sense) that have been established for many decades. Apple design decisions have been going downhill since Steve Jobs passed away. Sigh. —Jeffrey

— comment by Michael on February 21st, 2017 at 2:36pm JST (7 years ago) comment permalink

On a long drive, I recently recorded another track with RideWithGPS while simultaneously launching and running every single app that accesses maps. I ran each app for 10-20 minutes and nothing caused my recorded track to snap to roads. Many of the apps I used definitely snap to roads but did not affect the recorded track.

So RideWithGPS works, now I’ll have to repeat the experiment with the rest of the apps I used to record but I at least I know there’s one that works properly

This sounds promising, but let me ask whether you’ve seen road snapping with other (known-snapping) apps on that exact road? Road snapping doesn’t happen everywhere… just where Apple has certain data. In my experience around Kyoto, it tends to happen in the city, but not on the smallest roads. It rarely happens out in the countryside. —Jeffrey

— comment by Michael on March 3rd, 2017 at 2:50pm JST (7 years ago) comment permalink

My experience here in the US is that it snaps to even the most rural logging roads. It’s messed up my efforts to map some very remote roads that happen to be high up on ridges to get occasional data signals. I’ll continue to test when I kick this flu and can get back out. I’ll also have to dig around a bit to find some old snapped routes to verify.

— comment by Michael on March 6th, 2017 at 3:30am JST (7 years ago) comment permalink

I “solve” this problem by using Google Maps in Cyclemeter. If you clear the cache on the Google Maps app before starting the Cyclemeter, start recording your ride, and then immediately switch to airplane mode, snap to roads is disabled. Under these conditions, the iPhone has to map data and no means to acquire more, so the track is free of any snap to roads effects. As a bonus you save a lot of battery life. There are obvious downsides to this approach, but it’s a viable option if you know your area or don’t need navigation. You can always turn airplane mode off wherever you are to check for messages or direction, but remember to clear Google Map’s cache again before resuming in airplane mode. This approach works really well for and I’m pleased with the un-corrupted tracking of my route. GPS is not disabled in airplane mode.

BTW, if you upload Cyclemeter rides to Strava in .tcx format, you get to keep iPhone’s barometer data for elevation, instead of the poor GPS elevation data that Strava often substitutes. The combination of disabling snap to roads and using proper elevation data effectively makes your iPhone tracking almost as good as a dedicated gps device.

Some good advice there, thanks. Note that you can do completely-offline navigation with the Maps.me app while you record your ride with another app. —Jeffrey

— comment by cos(theta) on November 22nd, 2017 at 11:14pm JST (6 years, 4 months ago) comment permalink
Leave a comment...


All comments are invisible to others until Jeffrey approves them.

Please mention what part of the world you're writing from, if you don't mind. It's always interesting to see where people are visiting from.

IMPORTANT:I'm mostly retired, so I don't check comments often anymore, sorry.


You can use basic HTML; be sure to close tags properly.

Subscribe without commenting