Monthly Archives: November 2012

“Snap To Road” in iOS 6 breaks accurate GPS recording

A lot has been written about the quality of Apple’s iOS 6 Maps data. As it turns, there is another side to the story. It was not noticed before, possibly because it only affects people who want to accurately record a GPS track of their outdoor activities. Here is how I learned about this problem:

When my new iPhone 5 arrived, I was excited. Finally I was able to use my new Bluetooth heart rate strap while cycling. (I had an iPhone 4 before, which doesn’t support Bluetooth smart accessories.)

I was hoping for a more accurate track recording of my bike rides, too, because alongside GPS the iPhone 5 also supports the Russian GLONASS geo-positioning system (as did the iPhone 4S ). My old iPhone’s GPS recordings occasionally become inaccurate, especially when riding through forests. The more satellite signals coming in, the better.

I was in for an unpleasant surprise.

I usually track my rides with the popular Strava iPhone app. What sets Strava apart from other GPS tracking apps, is that it lets you mark arbitrary sections of your rides or runs as ‘segments’.
Whenever you run or ride through any of these ‘segments’, the time it takes you to finish is compared against other Strava users, who also completed this segment. This is an really easy way to see how your performance improves over time and how you compare against other cyclists or runners.
However, there is a catch: If your recorded GPS track doesn’t follow the pre-recorded segment closely, Strava won’t recognize your effort. All your suffering has been in vain.

Once I returned home from my ride I was disappointed. Strava hadn’t picked up one particular segment, where I went pretty fast, hoping to improve my personal record. Sometimes this happens when the GPS reception is bad. But since I had placed high hopes in the iPhone 5’s supposedly improved GPS reception, I decided to take a closer look.

The quality of GPS tracking in general was pretty good. In comparison to the iPhone 4, the recording followed my actual route much closer. Here’s a comparison of the same route, recorded with the iPhone 4 on iOS 5 and the iPhone 5 on iOS 6.

A track recorded with an iPhone 4 on iOS 5.

A track recorded with an iPhone 5 on iOS 6.

I also noticed that iOS 6 doesn’t know about Berlin’s popular Mauerradweg bike street, a 160km long route following the perimeter of the former Berlin Wall. Cars are prohibited on this route and it’s therefore used by joggers, skaters, and cyclists like me. I often use the ‘Mauerradweg’ for cycling, because it’s a quick and safe way to get from Berlin’s center to its outskirts.

The Strava segment for with I was hoping to improve my time is on the ‘Mauerradweg’ bike street. While following my recorded route further I noticed something odd. Once I reached a certain speed threshold, the recorded GPS track jumped about 50 feet onto a highway that runs in parallel to the bike street. This jumping is probably the reason Strava didn’t take my time into account. My recorded track simply doesn’t match Strava’s reference track close enough for my time to make it into the segment’s leader board.

A screenshot of the Strava app on iOS 6. I was going on a bike street unknown to iOS 6 (gray, dotted line). Once I go a little faster, my GPS location jumps onto the nearby highway.

Here is what I think happens: Unlike it predecessors iOS 6 has direct access to map data. Once iOS detects you are going faster than a certain threshold (in my testing around 20 mph), it will correlate your GPS data with the location of a nearby street running in parallel to your actual track. I presume this was implemented to improve the turn-by-turn navigation experience for car drivers, in case where the received GPS signal is slightly off.

In theory, this might be a good optimization. However, when used in combination with the map data on iOS 6, it makes accurate GPS recordings impossible in areas where street data is less than perfect (probably everywhere outside San Francisco, especially when it comes to bike-only streets not covered by whatever car-only data provider Apple acquired its data from).

On iOS 6 perfectly good GPS recording is turned invalid, just because iOS 6 doesn’t know the street you are traveling on. While this might not effect the majority of users, it ruins the experience for users of the Strava iPhone app and similar apps.

I contacted Strava about this issue, and this is what Elle from Strava told me:

Thank you for sending along this very helpful info! Indeed, we are already aware of this problem, but unfortunately the Apple OS does not allow us to choose whether we have this “snap to road” feature or not. All location data is bundled into one source, called “Location Services” and it is not possible to distinguish the factors that go into this location data.

We are in contact with Apple about this, and hopefully some progress can be made there!

Hopefully Apple implements an API for GPS recording apps to opt out of this optimization and puts the fun back into Strava for me and other users. Apple’s intentions with this optimization are probably good, but considering the current state of the iOS 6 map data, they actually worsen the results for people like me.

Update (Nov 5, 2012): I filled a bug with Apple about this. I posted my bug report here. If you are hit by the same bug, please duplicate it with Apple’s bug reporter.

2nd Update (Nov 5, 2012): I was contacted by the developer of another GSP related fitness app. He suggest that Strava simply forgets to set CLActivityType on iOS 6 to CLActivityTypeFitness. Without a correct type being set, Apple guesses and assumes an automotive activity beyond a certain speed threshold.
If true, that would be a pretty embarrassing oversight on Strava’s part.

3rd Update (Sept 12, 2014): So it’s been almost two years since the original post, and the bug is still in Strava. Pretty unbelievable. 😦

My workaround is to use the Wahoo Fitness app for ride recording and then use the built-in export to Strava feature.