More GPS Cycling Tests: Things are Pretty Bad and There’s Little Hope
Top of Mt. Otowa (音羽山) Kyoto, Japan -- Otowyama (音羽山) -- Copyright 2015 Jeffrey Friedl,
Nikon D700 + Sigma “Bigma” 50-500mm OS @ 50mm — 1/1250 sec, f/8, ISO 560 — map & image datanearby photos
Top of Mt. Otowa (音羽山)
Kyoto, Japan

I made my second cycling run up Mt. Otowa (音羽山) on Wednesday, the first having been two days prior in the gloomy late afternoon just before a typhoon came through. Wednesday's was the first afternoon after the mild typhoon passed, so I expected the air to be really clear (like this and this), so I lugged my Sigma Bigma 50mm~500mm zoom all the way up there, along with the 2×TC to give me a 1,000mm lens.

It was so not worth it... it was the most hazy I'd seen it in ages.

Super Super Hazy I was there for an hour, and could never even find Kyoto Tower -- Otowyama (音羽山) -- Kyoto, Japan -- Copyright 2015 Jeffrey Friedl,
Nikon D700 + Sigma “Bigma” 50-500mm OS @ 100mm — 1/1250 sec, f/13, ISO 800 — map & image datanearby photos
Super Super Hazy
I was there for an hour, and could never even find Kyoto Tower

The only things that were sort of clearly visible were close, just near the foot of the mountain. This is a gas station that I pass by along the way that marks an increase in the steepness of the route...

Starts to Get Steeper Soon -- Otowyama (音羽山) -- Kyoto, Japan -- Copyright 2015 Jeffrey Friedl,
Nikon D700 + Sigma “Bigma” 50-500mm OS @ 1000mm — 1/1250 sec, f/13, ISO 1800 — map & image datanearby photos
Starts to Get Steeper Soon

As the crow flies it's about 2,580m (1.6mi) away, but due to how the road winds up the mountain, the covered distance is about three times that. It took me about 49 minutes to make it from there, and about 23 minutes to make it back down.

(If find it shocking that the return trip takes only half the time; it feels like it takes about 1/10th the time.)

In the spirit of The Voodoo of Elevation Gain and Strava (and How I Get Around It), I brought three GPS/GLONASS units with me, using various ways to extract nine different tracklogs...

Apple iPhone 6+ Via the Strava app.
Via Abvio's Runmeter app.
Via the Runtastic app.
Via the Galileo Offline Maps app.
Garmin eTrex 20downloaded from the device
Bad Elf GPS Pro + Downloaded via their app, with GPS elevation.
Downloaded via USB, with GPS elevation.
Downloaded via their app, with barometric elevation.
Downloaded via USB, with barometric elevation.

Now in theory, all four iPhone apps should produce the same tracklog because they all share the same iOS Location Services data, but they're all quite different. Runmeter (which is identical to their Cyclemeter and Walkmeter apps except for the name and icon) has an option to use the iPhone's barometric altimeter, and as the Voodoo post explains, the Strava app ignores both iPhone altimeters, but elevation aside, the latitude/longitude tracks among the four should be identical, but they're far from it:

The Four Identical iPhone-app Tracks

Part (all?) of the problem is the sampling frequency. Of the four iPhone apps, the most frequent logger is Galileo Offline Maps, which creates a datapoint every second when there's obvious movement. The other three apps sample the location every so often in ways that can lead to some big errors. For example, Runmeter's didn't put a datapoint for where I stopped my ride until more than 30 seconds after I had stopped, making it look as if I was 30+ seconds slower than I actually was. Adding 30+ seconds to a segment can destroy the effort (e.g. a hill-sprint that takes a respectable 90 seconds gets recorded as a pathetic two minutes.)

Even more odd are the four tracklogs from the Bad Elf GPS Pro+. On the plus side, it records a data point once every second (and can be configured to record 10 per second!), and also, it records altitude two ways (satellite and barometric). Because of that last feature, in extracting its data, I'd expect one track with two elevation profiles, but as odd as it seems, one can actually derive two different tracks with four elevation profiles. You see, tracklogs can be pulled from the device via direct USB connection, or via its iOS app. One would think that either method is just transporting the same data, but they inexplicably give different data. I then split each into two tracklogs, one with the satellite altitude, and one with the barometric altitude. So we end up with two tracks with four different elevation profiles. Bizarre.

(I so wanted to like this unit, mostly because the company seemed to have a clue and wasn't Garmin, but with so many little problems like this cropping up, I have to finally admit that I can't recommend the unit.🙁)

Anyway, I have nine tracklogs, and of course none of them agree on the amount of vertical gain. This problem likely stems from the aforementioned sampling frequency, and also the data source (barometric or satellite altimeter) and post processing. Here's a look at the tracklogs, their resulting plot in Google Earth, and various claims about the vertical climb: what the app itself claimed, what my software calculates, and what Google Earth calculates...

Vertical Gain (meters)
Tracklog Points App Jeff Earth
iPhone / Galileo 5,243 738 814
iPhone / Strava 3,979 984 1087 1194
iPhone / Runmeter 658 607 582 635
iPhone / Runtastic 2,242 879 863 932
Bad Elf (app/GPS) 9,641 782 855
Bad Elf (app/baro) 9,641 620 752
Bad Elf (USB/GPS) 9,641 782 823
Bad Elf (USB/baro) 9,641 623 760
Garmin eTrex 20 9635 931 1001

The wide variation among results is pretty ridiculous, which is probably an accurate reflection on the state of consumer GPS, and perhaps why Strava throws away your elevation data in preference for its data. Sure, Strava's data may be wildly incorrect, but at least it's consistently incorrect (well, it has consistency to the extent that a user's two-dimensional location data — latitude and longitude of each point along the route — is correct, which is to say that it's not really consistent at all. 🙁)

For what it's worth, the shape of the iPhone / Galileo elevation profile looks the most realistic, followed closely by Runmeter and the Bad Elf barometric. The Runtastic and Strava results are just ridiculous, and the GPS tracks from the Bad Elf and Garmin units are clearly broken.

It's a sad state of affairs. I'd love to try the test with one of those $10,000 commercial/professional unit.

So what's the actual vertical climb for this route?

I'm going to say it's 700m (2,300').

The government of Japan makes very accurate laser-derived elevation data available on this web site. The route from my house up to the top of the mountain can be broken into just a few up/down segments, whose vertical climb can be easily derived by comparing the elevation at the start and end:

  1. Front door to Sanjo St: down 2m
  2. To top of Keage hill: up 51.8m
  3. To low spot just before turnoff to old Sanjo: down 46.5m
  4. To the gas station seen above: up 35.9m
  5. Underpass below Rt 1: down 4.8m
  6. To high point at trail entrance at end of road: up 423m
  7. Tiny/steep downslope near start of trail: down 7m
  8. To top of mountain: up 110.5

The ups are the vertical climb on the way there, and the downs become climbs on the way back, so just adding them all together gives the total: 681.5m

This is an absolute lower bound... the vertical climb will be more if there were rising slopes that I forgot about.

I do know that there were a few spots on the steep road up the mountain where it leveled off for a while, and even went slightly downhill for some time (short reprieves certainly appreciated). I couldn't measure these well on the web site because I didn't remember their exact locations, but let's say there were four of them and the elevation loss was just 2m each, then that adds 8m (4×2m) that we have to re-climb on the way up, and the same for the way down, so that leaves us with a calculated 697.5m. It's probably a bit more than that due to fluctuations on what seem flat sections, so let's round it up to 700m and call it a day.

In the end, I uploaded a smoothed version of the Galileo track to Strava, where it appears as Otowayama #2 (音羽山その二) with a vertical climb pulled out of thin air as 771m.

All 10 comments so far, oldest first...

Very interesting, particularly the variation between apps… thanks for sharing all of this data!

— comment by David K. on May 16th, 2015 at 6:45am JST (2 years ago) comment permalink

I’m a big fan of geoencoding as well, and have been using the iPhone 4 and the MotionX-GPS app for some time. I’d like to get better accuracy and I’m looking for a replacement (I’m switching jobs and have to give the iPhone back). There are a lot of options out there and it’s pretty tricky to choose. If you had to choose a new GPS unit for logging tracks for geoencoding your photos, what would you choose now? Would you get an iPhone 4s, a Garmin unit or something else? A $10,000 commercial/professional unit is off the table, though. 😉

I would not get an phone due to battery issues, and the apparent inability to create a 1Hz log. When I thought I lost my Garmin unit in January, I was happy to find the Bad Elf and give it a try, but it’s got its own issues. If I had to buy something now, I’d hope a search would reveal a new unit I’d not come across before, but lacking that, I’d probably get another Garmin unit and hate myself the whole time. —Jeffrey

— comment by Fred on May 16th, 2015 at 8:57pm JST (2 years ago) comment permalink

Probably Strava calculates height based on the STRM. In the States the model provides height with a 10 meter accurary but is restricted to 30m in the rest of the world. Strava is probably more accurate in States then in the rest of the world. See also to this newsflash :

— comment by Lode Nachtergaele on May 18th, 2015 at 1:26am JST (2 years ago) comment permalink

What are some of the other issues that you have with the BAD ELF GPS PRO+?

I don’t know of any other GPS units on the market that can record both the GPS/GLONASS and barometric elevation data. It’s usually one or the other! I’m seriously considering the Bad ELF GPS Pro+ because of this. You’re right that the behavior that you described is weird and it shouldn’t happen. It does seem like a deal breaker. Have you contacted Bad Elf and see if there’s a solution in the horizon? So in the end, how were you able to get one track with two elevation profiles?

I know the Bad ELF GPS Pro+ can also record 10hz of GPS data internally, but the problem is that the internal memory is minuscule. Are you aware of any iOS app that can record a 10hz GPX tracklog? I know the Bad ELF GPS Pro+ can transmit 10hz of data through bluetooth to any iOS device. The question here is whether there are any apps that can record all of that data.

In terms of latitude and longitude accuracy, how well did both the Bad ELF GPS Pro+ and Garmin eTrex 20 compare to the iPhone 6 Plus? I have to admit that I’m a bit surprised that you seem to indicate that in terms of overall accuracy (I’m assuming you’re factoring elevation), the iPhone 6 Plus comes out on top.

I did contact BadElf and their engineer has been quite responsive, but it’s been three months and no update. Other problems include the inability to read the thing well because the screen cover is soft plastic that gets scuffed quickly, turning cloudy-ish. It’s a hassle to get the logs (you’d think you just plug it in and download them, but that’s not how it works). It also sometimes gets fairly off track due, I was told, to multipath interference…. something apparently that better software in the unit could avoid.

I wrote a little script to create a separate GPX file from the barometric elevation.

I flip-flop on which I think is the most accurate. In good conditions, the iPhone seems to be the most accurate, which matches my findings with the iPhone 4s some years ago. But in the mountains, it varies, with one unit clearly doing better than the others on one outing, but clearly doing worse on others. I haven’t figured out a pattern.—Jeffrey

— comment by JJ Lee on May 18th, 2015 at 8:09pm JST (2 years ago) comment permalink

Are any of these GPS devices able to use MSAS to get WAAS-like corrections?

I believe they all are. —Jeffrey

— comment by Bill on May 19th, 2015 at 6:35am JST (2 years ago) comment permalink

If one was trying to get accuracy and consistency using these consumer GPS units, it could be seriously frustrating… It’s fun the way you are very geeky and perfectionist about the data.

— comment by nnkka on May 19th, 2015 at 10:51am JST (2 years ago) comment permalink

It’s a hassle to get the logs? Mind explaining why it’s a hassle. You’re scarring me away from this unit.

Do you have any plans to release that script? I’d like to use it if I want to try out that GPS unit myself.

In theory you just plug it into USB and copy the logs, but in practice you plug it in, and wait wait wait while it “generates logs”… it can take 10+ minutes for a longish 8-hour log. Then you can copy the log to your computer…. maybe. Sometimes only some logs are there, and sometimes they’re not complete. I haven’t found a pattern, and gave up trying because instead I transfer via the app. It’s still frustrating because it locks up your phone for several minutes while it transfers the log, but at least it’s consistent. I so very much wanted to love this unit (it’s not a Garmin, after all), but it’s got issues. The script to spit out the barometric log is a trivial little Perl one… I suppose I can put it out there. I’ll link it from the bottom of the article later… —Jeffrey

— comment by JJ Lee on May 19th, 2015 at 5:54pm JST (2 years ago) comment permalink

Things are pretty good if you use barometric GPS’s. Consumer units have improved since your 2006 critique.
It was the Elf GPS Pro+ whose barometric track (752m or 760m) was closest to your estimate of 700m, or was it 771m?
Things are pretty bad if people continue to believe in correcting elevation. All the non-barometric units were doomed to inaccurate results.
Instead using a $10,000 commercial GPS you might find better results with some modern cycling (barometric) GPS units.

— comment by Douglas Kubler on May 25th, 2015 at 5:52am JST (2 years ago) comment permalink

(from California)
About the 30-second lag with Runmeter: to compute the time on a segment Strava starts with the first point AFTER the start of the segment and finishes with the last point BEFORE the end of the segment. With Runmeter, Strava can give you a 29-second advantage by delaying the start of your time on the segment and give you another 29 second advantage on the end of the interval.
There are KOM’s given (unfairly) to users of the Garmin 200 which has a large recording gap.

You’d think they’d prorate the line between datapoints to guess when you crossed the start/end line. )-: —Jeffrey

— comment by Douglas Kubler on May 25th, 2015 at 6:27am JST (2 years ago) comment permalink

Enjoyed your blogs. Have you any experience with I use it and have the barometer enabled in the app for my iPhone 6 Plus. I also use Strava for comparison. I’m only using a Wahoo cadence sensor and a Wahoo HR monitor for ride insights on my e-MTB. The puzzle I’m playing with, which in part needs elevation data, is separating out how much electric assist I’m getting and my actual power input into the pedals. As you can imagine that is nigh impossible, fun trying though! I can’t afford a power meter, but just wondered if you’d tried RideWithGPS, which I really like.


I think their routing tool is the best of those that use Google data, but otherwise I’ve not used their site much. —Jeffrey

— comment by John Rushworth on January 6th, 2017 at 10:41pm JST (4 months, 18 days 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.

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

Subscribe without commenting