Tuesday, September 23, 2014

My Experience using Strava Route Finder

When Brian and Janet visited Cara and me in Basel, finishing off their extensive tandem tour of Europe, Brian told me he'd used Strava route finder as his primary source of routes. This had obviously worked well for him, and it motivated me to rely on it a bit more for my rides here.

There's a variety of ways to make routes with Strava route finder. I'll go through some of the approaches I tried, and how they worked for me.

Enter endpoints, blindly follow

First was my ride to Gempen, which actually preceded Brian and Janet's visit. There I selected my starting point at the apartment, and the end point, the town of Gempen at the top of the hill. I'd expected to be routed up either of the two main Strava segments I'd seen which climb to Gempen, one from Munchen, the other from Dornach. But when I blindly followed the recommended route, I found myself doing a dirt climb, one which started as a well groomed "fire road", but which ended up on a steep, rocky path which caused me to walk for a bit due to traction problems. This was all good adventure, but it wasn't what I had expected. The reason is Strava uses route popularity as a criterion, but if there's enough use by recreational mountain bikers, a dirt path can be sufficiently popular to get priority. A suggestion here might be for Strava to differentiate road categories, and allow priorities to be placed on these. For example, a dirt road might have its equivalent "cost" multipled by a factor, for example 2.

Navigating off iPhone

Next I put a constraint node at the base of the climb. This worked well, although I deviated from the defined route approaching the base, taking an alternate route which climbed and descended a residential hill. This was because I was navigating using only the app and not the Garmin Edge. Since I don't have an iPhone mount, to check directions I had to remove the phone from my pocket, get past the security screen (typically try and fail several times with fingerprint due to sweaty fingers, then enter my PIN), and check the map. The map is great, showing the route taken so far, boldly and clearly, compared to the defined route.

This ride would have been better with a handlebar mount, although keeping the phone display on would have used too much battery, and extended battery solutions for the iPhone aren't very efficient, charging the iPhone battery with a secondary battery then running the phone from the iPhone battery. This substantially decreases energy efficiency and increases battery fatigue relative to using a single battery, and adds a lot of mass and bulk to the phone. So the iPhone is not an ideal platform for real-time navigation. A good head unit makes more sense if it works.

Using an existing activity

Later I did a ride into the Jura mountains south of Basel. This was a wonderful ride, 107 km, made more epic by the fact I suffered a mild bonk which would have become a major bonk if I'd not found a cafe at which I was able to use my extremely limited French to order a delicious brie + tomato sandwich. In this case I directly used an activity I'd found on Strava with activity search. Strava has an option, when viewing an activity, to load the activity directly into route builder. The URL for this is the primary activity URL followed by "/route".

This is a nontrivial operation compared to the alternative way of generating routes for use on a Garmin, which is to just export an activity as a TCX (Edge 500) and loading it into the "new files" directory. The route builder first tries to map the arbitrary position points onto its known "road" network ("roads" being any candidate paths for bicycles). Then it constructs the route data using the road data.

One positive change I made was to switch to using the Garmin Edge 500 as my primary navigation aid instead of relying on the phone only. The phone, however, was essential back-up, because the Garmin Edge 500 doesn't provide any context: it just shows a jagged line for the route, then alarms when you're off course. It also often alarms when you're on-course, as it tries to keep you on a tight leash. This is great as was the case on a later ride where I was flying down a descent and missed the turn to a narrow climb. The alarm was quick, and the amount I had to climb to get back to the turn was trivial. Had the alarm gone off 500 meters after the turn, that would have added a considerable amount of climbing in addition to the difficult climb of the route itself. But the price that's paid for this hair-trigger warning system is that minor GPS errors can cause the Edge 500 to generate "off course" errors even when riding on an isolated, straight road without intersections So to check Garmin warning messages, and to provide context to turns where there's multiple similar options, being able to look at the Strava map display is extremely valuable.

The key thing on using the iPhone to record position on long rides is that it drains the battery. The best option is to run in airplane mode, but then you lose the ability to dynamically load map data. One approach, which I used in France when I was outside of my data plan domain, was to scroll through the route before the ride, pre-loading in the map data (which are cached), then when I did the ride itself I was able to see maps without any further network activity. This approach can also save on data use if, like me, you're on a limited data budget, and can scan the route with a wireless connection.

But even if there's battery to record the entire route, I prefer using my phone for other things, like taking photos, accessing web resources, and sending emails and/or texts. Combining these activities with essentially contunuius position tracking runs a major risk of the phone not surviving a ride.

But an alternative to recording the activity on the iPhone is to instead just view the route, which will indicate the present position with a dot. Then position need not be determined every 3 seconds, as it is when recording the route, but rather only when you bring up the map. Then battery life isn't a major problem. This is what I did this ride. The only downside is if the Garmin Edge 500 fails somehow there's no back-up. For example, on my second Gempen ride the Edge 500 had substantial position errors which caused me to not match the segment I was after. The only real option would have been Paul Mach's "snap to road" utility on RaceShape. And this doesn't work well with switchbacked roads such as the one I was on. So having the phone provides nice security.

Anyway, on this ride I was cruising along a busy road with a nice cycling position on the right between the vehicle lanes and a tram track. The vehicle traffic wasn't so nice, but there were very limited intersections, traffic was relatively light for such a major connecting road, and line of sight was fine so drivers had no issue passing me. Suddenly the Garmin told me I was off course, the path on the screen clearly showing a jog to the left. Sure enough, across the road on the left was a bidirectional bike path. But it lasted only a very short distance, no more than 1 km, and then I would have had to return to where I was riding. I didn't believe the rider had taken that path, although it's possible. When I checked the original data the variation due to GPS errors was greater than the distance between my lane and the path on the opposite side of the road, so I didn't have much clue from his data, although his indicated position seemed to be more on the left of the road than the right. So perhaps the route finder took its best guess.

Later in the ride, I came to a very short out-and-back section which was obviously meaningless. The original rider appeared to have either taken a wrong turn then recognized his error, or else he's made a quick run to a gas station for resupply of food or water. I ignored the out-and-back and the Garmin route tracking had no problem.

The last climb of the route was an out-and-back according to the original activity. I started the climb, waiting for the turn-around, which I assumed was the top, to appear on the display. When I saw it I ramped up the effort. Closer... closer... I was almost there, keeping the effort high. Then I realized that this wasn't the top, that the climb continued further. The rider hadn't reached the top after all. Perhaps he'd planned on something longer, but then thought better of it, and turned back. But I wish I'd realized that beforehand! I did continue to the top, going off route, suffering the rest of the way. From there, I followed a more attractive path to rejoin the defined route "downstream", instead of returning down what I had climbed.

Toward the end of the ride, the distance to the finish counted down.... 3 km... 2 km... 1 km. But at around 200 meters I went off route. I backtracked a bit, going down a side road which deviated somewhat from the main road, but couldn't reach the route end. The rider had finished his activity at his house, perhaps, or else the activity ended when it reached his privacy radius. In any case, the finish made no sense for my ultimate destination, so I shut off route tracking and continued on my way.

Some of these issues can be dealt with by editing the route in route builder. The route builder instructions say the route can't be modified except for the start and finish, which can be modifed. But in this case I had been unable to move the start and finish points, which were essentially coincident. When I tried to do so, the route builder would re-optimize the route into an out-and-back, cutting off the vast majority of the loop. So after trying various approaches I gave up and decided to use the route with the original start and finish points.

Overall, though, it worked fairly well. The Garmin Edge navigation worked much better than it often does, due to limited road network complexity and relatively good position accuracy. And the rider of the original activity clearly knew what he was doing as he made very few deviations from what I would consider an optimal path. He also clearly had solid position accuracy. It could have been much messier.

By the way, one really nice thing about using Strava versus other options is the use of route popularity. For example, I noticed it tended to route me along roads at which food would be available, rather than options which bypassed food options. This is super-valuable, something for example Google route finder might miss. Basically whatever the locals tend to do, Strava route finder will tend to emulate. It trusts the judgment of locals. Note if the "locals" are racers at a recent Tour de France who uploaded their race data, with full road closure, this may not be a good model for emulation, but fortunately it usually works out well in ways which may be nonobvious.

One comment on using the phone for navigation: this was necessary because I was using the Edge 500, which has no maps. The Edge 800, for example, does have maps. However, with the low screen resolution these maps are of substnatially diminished utility relative to those on the iPhone 5s. Do even with the 800 I'd want the phone as back-up. I'm not sure about newer Garmin units (510, 810, 1000). Without taking advantage of the 800's maps, I prefer the 500 navigation, since the black-on-wide route trace is high contrast and easy to see in a range of light conditions. On the other hand, I'm not able to interpret the 800 map display (using Open Street Maps) safely when I'm riding. It requires too much focus and attention.

Generate a route with GUI, reproducing existing activity

Next I decided to use the route builder GUI to design a route, using an existing activity as a reference. In this case I found a promising loop through Germany's Black Forest, so in route builder, I put down nodes so the resulting route basically tracked the activity. This was to avoid the issues I'd had with using the activity position data directly, perhaps most significantly allowing me to define my own start and finish point.

This process is a bit of a hassle since I had Strava running in two separate browser tabs: one for the activity, the other for the route, which I had to compare using short-term memory. Better would have been to be able to superpose the activity and the route Perhaps Strava can add this feature.

But although it was more time consuming than it seemed it should have been, this worked very well, with one exception. At one point the ride had me do another short out-and-back, one which I resisted but which was enough to cause the Garmin Edge 500 to indicate an "off-route error". The reason is I'd been slightly sloppy in putting down a constraint node, dropping it at a random position in a town. This turned out to be off the main route through the town, so route finder was forced to do a little out-and-back to hit the constraint point, which are strict.

Later in the ride I was riding on a very nice path along a river. Suddenly the Garmin sent me across a bridge to the other side, where I rode on a narrow grade-seaparated combination bike path-sidewalk. The path I'd been on had been much nicer, but I concluded there must have been a good reason it had put me here. It turned out the only reason is I'd dropped a constraint node on this side of the river, rather than the nicer opposite bank I'd originally been on.

Both of these mistakes point out an additional step which should be done in route design: reoptimize the constraint points based on the route. Had I reviewed the route details proximate to the constraint nodes I would have seen the little out-and-back stub and the premature crossing of the river. One way to minimize these issues would be to put the constraint nodes in areas of relatively less ambiguity. So if I need to ride a long, isolated road into a town, put the constraint node on that road rather than in the town itself. Then the route builder can design an optimal path through the town rather than limiting itself to what may be an uneducated node placement.

Of course key on constraint placement is to not over-constrain. It may be tempting to plop down constraint points every km but it simply makes no sense. For a loop, you need the start point, the end point, and just enough points to have it track the loop and in the desired direction. Two or three additional points is probably enough.

There is still the issue of dirt paths, which I'll described in the next section. So make sure to check the route for anomalous "short-cuts" before committing.

One more piece of learning I'd realized: don't put the start point too close to home. In my case there's a lot of street complexity near the apartment. If I put the start point and finish point right there, it restricts me to a single route out and back. I prefer a bit more improvisational freedom. So I instead start with the point right at the apartment, define the route, then move the start and finish points out a bit to provide me a bit of breathing room. For example, if I wanted to ride to a local shop to get some food or perhaps a bike shop to pump up my tires first, this meant I didn't need to return exactly to the start point to stop the Garmin from complaining. So instead I put the point along that initially defined route in a place which is relatively unambiguous, where I'll probably want to go even with a minor diversion near the route start or finish.

Generating a route with the GUI without a reference activity

Next I decided to skip the part where I use an existing activity for reference. I wanted to ride La Grande Ballon, a category 1 climb which has been used (at least among its multiple variations) in the Tour de France, most recently this year. So for this, I put the start point at home, a second point on the Grand Ballon summit (or what appeared to be the summit), and a third point at the Mulhouse ("mul-HOOSE") Gare where I planned to catch a train back home. Then as I just described moved the start and finish points a bit away from the apartment to give me a bit more flexibiltiy in start and end ride behavior.

This turned into a great ride. But, as always, there were a few issues.

First, I was riding along a bike path along a major highway (major in traffic volume and speed, but not in number of lanes, a refreshing change from the US where even middling suburban roads are blown out to 6 lanes or more in many cases). Suddenly the path veered off to the left, between two corn fields. The route, however, continued straight. What should I do? I consulted my iPhone map and, sure enough, the path went around the back of the cornfield to rejoin the road later. So I went that way.

The Garmin complained that I was off course, but I stuck to it, and the path turned out to be exactly what I wanted. For some reason Strava didn't have it in its road database, and it therefore routed me on the main road instead, where I very much did not want to be, with its high speed traffic including heavy trucks.

The only way around this, as far as I can tell, would be to modify the route in the route builder using "manual mode". In manual mode it simply connects constraint points with straight lines. This requires constraint points placed sufficiently close that this is a good approximation of what is generally a curving route. I'm not sure as I write this if I can mix manual mode and automatic mode. Ideally what I'd want is to use the manual mode only for the paths around the corn fields. But it would be difficult for me to realize the automatically defined route was a problem. Fortunately this is the only time in my adventures the route builder made such a mistake.

Then after climbing La Grand Ballon and passing the summit sign I turned onto a side road which appeared to go to summit proper, where I'd placed my constraint point, sort of like the short loop at the top of Twin Peaks in San Francisco, or the climb to the observatory on Mount Hamilton Road in San Jose. In each of these cases the major "through way" would miss getting the full experience.

This turned out, instead, to be an access road for a restaurant, not typically climbed. To the contrary, when I returned down the path and continued on the main road, no longer climbing, to my horror I reached a white line painted across the road. Clearly this was a "KOM line". So would the Strava segment have been designed relative to the summit sign or relative to this KOM line, which was actually at slightly lower altitude? It turned out the latter, resulting in extra minutes having been added to my time due to my excursion up and down the side road.

Descending, I followed at first the route I'd taken up, then turned left at a junction to follow the Tour stage. The Tour stage had climbed the opposite side of the mountain, crossing the summit, then descending the side I'd climbed for the final kilometers. It then at least initially followed the path I planned to take me to Mulhouse, where the stage finish was, rather than going through Thunn, from where I'd begun my climb.

From the junction there was a short climb, the road decorated with paint both for riders and for Didi the Devil, then it descended again. Suddenly as I was shooting down a modest grade I got "off-course". I checked the iPhone and sure enough, the course deviated from the main road for a brief short-cut. I tried to follow this way and there were two roads, a dirt one going down, and a paved one going up. I tried the paved one but again I got off-course errors. It was obviously the dirt path.

So this was another example of where I should have checked the details of the route, and where Strava isn't at all shy about using shorter routes which are likely mostly used by mountain bikers. I decided given the relative difference between the curving main road and the relatively straight route Strava recommended, the dirt road was a bit too steep for my present liking. I stayed on the main road and, as I passed, I saw I was correct: the dirt was rough and very steep.

So the lesson here is one I've described already: review the route for obvious anomalies. This includes not only things like this deviation, but additionally such things as going to a train station at the less convenient side of the tracks (it typically doesn't matter at which side of the tracks you arrive, although the route to one side may be significantly less direct). Fortunately this latter error isn't one I've made so far this trip.

Further along the ride, as I was entering Mulhouse, the route sent me straight into a fully packed street fair. There was simply no penetrating this mass of people walking with my bike at my side, let alone riding. It extended for multiple blocks, as far as I could reasonably see. I decided I needed to improvise.

The Garmin isn't up to this task: it simply shows the line I was supposed to follow, and as I deviated from the route, that quickly disappeared out of the display range. So the only guidance it was able to give me at this point was "off course".

So it was back to the Strava iPhone app. With this, I was able to follow main roads to reconnect with my route. Fortunately the Garmin is relatively quick to detect that you've returned to the course, not being at all pedantic about making sure you've tracked every inch of the way. This is an improvement over much earlier firmware versions, which had less flexibility.

And so after navigating a surprising amount of Mulhouse streets I was able to reach the train station. Then with considerable difficulty (since the French train ticket machines don't take my US credit card, which has a chip but no PIN; Swiss ticket machines take it) I was on my way back to Basel. I may even have been able to ride back quicker, but 130 km was enough for this day. (Note: I later learned you can buy tickets on the train as well, and there's no fee for bicycles).

Variation on recommended route

Next ride I wanted to return to Grenchen, to which I'd taken a round-trip train ride the day before to watch Jens Voigt break the hour record. There were some very attractive mountains visible just north of the city, and I wanted to ride these.

So I started route finder and defined a start point at the appartment and the finish point at the train station in Grenchen. It recommended a route along main roads which avoided the mountains. I'd later learn there was a very good reason for this, as the roads over the mountains are freakin' hard. But I definitely wanted to go that way.

There was a web of roads evident going over the mountains, and I wasn't sure where I should stick a constraint point to get into them. I didn't even know from what side I should climb them: from the northern side, from the east and ride a ridge, or from the south, go along the ridge, then return south? I could guess, but instead I requested instant guidance.

A very nice feature of the route builder is the ability to superpose the global heat map. Strava has become suffiiently popular that this heat map is fairly comprehensive in highlighting popular routes. With this, I could clearly see "hot streaks" going over the range. So I inserted a point at a promising location and I had what appeared to be a very nice route which met my goals.

And what a route: the climb maxed out at 18% sustained according to my Edge 500 data, with the following descent similarly steep. But it was a wonderful ride, a real success. The heat map was a very useful component in achieving this.


  1. Define a route with the GUI rather than using activity data directly. You can use the activity for guidance, although unfortunately there's no way to superpose the activity and the route.
  2. Use as few constraint points as possible to get the route you want.
  3. Place constraint points on relatively unambugious route segments, not in regions with navigational complexity.
  4. Move the start and finish points a bit away from "home", to allow for beginning and ending ride freedom without Garmin whining.
  5. Check the area proximate to constraint points, to make sure the constraint points are on the route (not requiring out-and-backs) and that the constraint points placement isn't excluding the use of more attractive routes which accomplish the same goal.
  6. Check along the entire route for unwelcomed "short cuts", for example down gnarly mountain bike paths.
  7. Look at the global heat map option to search for possible alternatives.
  8. Don't believe your Garmin when it says "off course" without checking a map first.
  9. View the route on a Strava phone app without recording to preserve battery capacity.


Justin Laue said...

Thanks for the great review of Strava Routes. Regarding your iPhone battery & data limitation issues, I have found that locking my phone's SIM card preserves battery life and prevents my phone from using cellular data. When the SIM is locked, your phone still activates the phone's GPS (technically GNSS) which Airplane Mode doesn't allow. It also prevents the phone from connecting to cell networks, thus saving battery.

Unfortunately it does require yet another PIN and to disable the SIM you need to restart your phone. More info here: http://support.apple.com/kb/ht1316

djconnel said...

Thanks! That's a very timely comment. I used to run it in airplane mode all the time, in particular on my old Android phone, and I thought it was an IOS 8 upgrade issue (and/or upgrading the Strava app) which was stopping it from working on the iPhone.

Anonymous said...

Gps Route Finder helps you to locate and track your mobile live location on the Google Maps, finding Driving Directions, GPS Location of the mobile phone and Navigation on Maps.