You may have noticed the heat map in my May infographic post or the link that I added to the sidebar. I've been playing around with maps recently. I've never been very good at manually logging my training, but I've been tracking my workouts consistently via GPS since 2011, initially with my first iPhone, then with various watches. Having distance, time, and heart rate data from all of my workouts has been super useful from time to time to help figure out why I got sick, or why I felt particularly good on a given day. But for the most part, the actual GPS data hasn't really done much for me. UNTIL NOW.
Strava maintains a global heatmap of all the data generated by its users, and makes the data available to municipalities and researchers to help improve infrastructure for biking and running. They also generate personal heatmaps for premium users. I've subscribed to this before, and the heatmaps are pretty cool, but not worth the $6/month cost of Strava Premium. But as it turns out, it is possible to liberate all of the data from Strava and make similar graphics using only free tools available online.
To do this, I basically worked through a handful of tutorials, and then figured out some finishing touches on my own.
Get your hands on all of your data. All of the GPS data that I've generated is on Strava, and as it turns out they make it very easy to get all of the data out. Garmin Connect is a little bit more difficult, but there are ways to handle that as well. Actually, in addition to a bulk export from Strava, I set up Tapiriik to automatically sync my Garmin files to a folder in Dropbox so that the files are there for me in the future. Regardless of how you manage it, you want to end up with a collection of all of your GPS files in .gpx format.
Combine all the data into a single .gpx file. This way, when you're doing the actual mapping you just have to handle a single file, rather than hundreds of files. Initially, when I was working with just a months worth of data, I found a webapp that can merge up to 20 files, which did the trick. My bulk Strava export contained 696 files so I had to search around a little bit to find something to manage them, but I managed it with GPSBabel - a free download and a very useful tool for GPS file conversion (I've used it before as part of a workflow to geocode photos).
Dig in to Mapbox. This is where things start to get more interesting. After signing up for a free account on Mapbox and navigating to Mapbox Studio, I created a new "Style", picked the look that I thought would work for me (Dark) and uploaded my data to Mapbox studio as a new layer. At this point, the tutorials ran out and I was left to my own experimentation to make the map look the way I wanted it. When you click on the layer that you just added, you have the option to change the data point type (fill, line, point or symbol) and the style (color, thickness, blur, etc.).
Build the Heat Map. Mapbox may have the functionality to create a true heat map by looking at spacial distribution of data points and mapping frequency to different colors - but if it does, I don't know how to take advantage of it. Instead, I duplicated the data layer several times, and played with the thickness and blur settings to give the effect of a heat map. There are also visibility settings which allow a particular layer to be limited to a range of zoom levels. This allowed me to use points for the zoomed-out view and fine lines to show the detail close up. The table below shows the settings that I settled on. Your milage may vary.
|Color||Zoom||Type||Radius/Width (px)||Blur (px)|
Create a global view. Once I got everything looking just the way I wanted it, I discovered that the data that I added was not visible when zoomed out far enough to see the whole US or world - I'm not sure why. Rather than digging into this issue, I discovered that Mapbox can also import csv files. This turned out to be a great workaround - for US locations that I've been to, I manually created a .csv file with a list of locations that I wanted to show, in the following format:
City,State,Country,Latitude,Longitude Minneapolis,MN,USA,44.977753,-93.265011 St Paul,MN,USA,44.953703,-93.089958
For European locations I created a second file, omitting the State column, and for all locations I used this tool to search for the lat/long coordinates. I imported these files, set them to only be visible on the few most-zoomed-out-levels, adjusted the color, blurred it a little, then leaned back and enjoyed my handiwork. An interactive version of the finished map can be found here.
That's all there is to it! I'm certainly not an expert on any of these tools, but feel free to leave a comment if you have any questions.
What are you doing with your GPS data?
How did your training go in May?
Back in September of 2012 I had my first trail/ultra running experience when I paced my good friend and now coach Adam of ASTP Coaching. It was epic enough that I wrote about it back then and am republishing the post in its entirety below.
The City Trails Loppet is a point to point trail race that runs from Robbinsdale into Minneapolis via either a 10k or 10 mile option - both of which highlight some hidden gem trails which are unknown to many MSP runners. This year was the third annual, and I've run all three, starting with the 10k in 2014, then the 10 mile in 2015, and sticking with the 10 mile this year. There are a few good recaps of this race out there on the internet if you’re looking for some more general info.
In the past I've managed to get a ride directly to the start, but this year I took the shuttle from the finish. I left the house around 7:30, allowing half an hour to get to the shuttle (including stopping for gas), half an hour to get from the finish to the start, and a solid hour to get situated and get in a good warm up.
As it turned out, the logistics were a breeze and I was sitting on a curb in the shade next to the start at 8:05. Oops. I took a lap up and down the street and picked up a $1 cup of coffee at a bar near the start, then wasted half an hour on my phone. I hit the porta-potty, ran into some friends, went for a 1.5 mile easy warm-up, ran into some other friends, and suddenly it was time to race!
This course starts off easy - with about a flat mile and a half on the streets in Robbinsdale. I am a chronic start-too-fast-er, so this is a very hard way to start off a deceivingly hard trail race. The previous two years I've run the first mile in 6:50, just shy of my road-PR-10k pace (41:27 at 2015 Get-in-Gear 10k), and suffered for it later in the race. This year I was determined to take it out slow, and spent most of the first mile glancing down at my watch to check my heart rate. During this time it became clear that it was HOT out - keeping cool was going to be tough, and going out too fast would only compound this. I rolled through the 1 mile mark in 7:22, relaxed and ready to crank it up.
The problem with the deliberately easy out of the start approach in a mixed trail race - especially as a reasonably experienced trail runner - is that when you hit the single track you have to be ready to be REALLY patient. You'll need to concede some places early with the expectation that you'll make them up later. On the CityTrail 10 mile course there are several extended sections of paved trail throughout the course, including most of the last 2 miles, so there’s plenty of opportunity to pass. But miles about 2-4 are on some sweet, flowy, rolling, narrow singletrack and it can be kind of a drag to be stuck behind people and unable to stick to your own pace in this section. For this race, because I've struggled with going out too fast, I decided ahead of time that this would be ok.
But when I got to that point I started to panic a little bit. I hit the single track with about 4-5 guys ahead of me, and I could immediately tell that I was more comfortable on the terrain than they were, and was having no trouble keeping my heart rate under control. I started looking for a place to pass. About a quarter mile into the singletrack the trail widens and passes under a little event shelter where people often spectate. I actually remembered this place a good 10-15 seconds before we got there and set myself up nicely to put in 5 second sprint and jump past the guys ahead of me to lead the group and have a free trail ahead of me! I took two excited steps and immediately fell flat on my face.
The group I was trying to pass cruised right on past me as I picked myself up I was covered in dirt and dust and had obviously scuffed my knee a bit, but felt generally fine. My new soft flask handheld had taken a big part of the fall but was fully in tact, even if the water was a little gritty from then on.
I settled back in and accepted that the world was telling me to just chill out. I reminded myself that there's plenty of room to pass later in the race, and just focused on enjoying the trails. This was pretty successful and I comfortably cruised the next few miles, passing a few people, but mostly just following a tall guy wearing Hokas who was faster than me on pavement but slower on trails and hills. In shorter races like this, aid stations are great spots to pick off places and I cruised past something like 5 guys (all wearing last years race shirt) who had stopped for a drink as we transitioned into the more familiar trails at Theodore Wirth Park. I did take the time to dump a cup of water on my head at all aid stations, which I find really helps me stay cool.
With about a third of the race done it was time to stop holding back and go the pace that felt right. I made a couple of accelerations to get by people in open sections before jumping back into single track, but missed out on one opportunity to do this after crossing Wirth Lake and suffered another half mile stuck behind somebody with no chance to pass. The frustration was short-lived and I accelerated into the hills at the north end of Theo, past the quaking bog and over the bridge to Brownie Lake, where I grabbed a cup of gatorade. The next few miles were where the early emphasis on pacing paid off as I was able to really hammer the hills and notch up the pace on the flats. My legs continued to feel great, and the last two miles were my fastest the race. I continued to pass people all the way to the crest of the nasty little last-mile hill where my little gerbil heart maxed out at 202 beats per minute. A quarter of a mile of downhill later I happily buzzed through the finish line.
This felt like a really successful race to me and I was super happy with the effort. Interestingly, my time was 1:20 slower than last year (1.7%), and my placing was a few percent worse in each category. I was initially a bit disappointed after seeing these results, but I didn’t get too caught up in it. It was at least 10F hotter out there this year than last year, and heat has been shown to significantly slow down marathon finish times. There were also 124 more people in the 10 mile this year - generally big increases in participation in a race like this happen near the front, not the back. I was very happy with my pacing, and my ability to push myself in the closing miles and I’m really excited to race more trails this summer and fall!
In the excitement of finishing up the race, meeting up with friends, heading out for brunch, I neglected to run a cool-down. I knew fairly quickly this was a mistake, and then neglected to complete the easy recovery spin that I pledged to do in the afternoon. A day later I completely regret these decisions. My legs are super sore and stiff and I’m really not looking forward to the hour that I’m planning to spend on the spin bike this evening. Note to self: next time remember to run at least a few cooldown miles after the race!!
I will say that I am not a fan of a Sunday race though. I get it for a big race like the Twin Cities Marathon which maybe has Saturday events or is looking to draw people to its pre-race expo for the benefit of its sponsors. For these races you’re most likely going to make a weekend out of it anyway. For a local 10k or 10 miler on the other hand, it’s a little tougher to manage pre-race rest and still get some stuff done around the house. Despite this, the City Trails race is worth procrastinating on yard work and focusing on racing. This weekend I managed to not have a whole lot to do on Saturday (and/or put off some things on my chore list for another weekend…), so I was able to get in a shakeout run, tidy up around the house and otherwise relax all day.
I almost forgot! This race has great swag. Every year I've done it I've gotten a nice pint glass and a top quality Salomon tech shirt. This year was no exception, and I think it may be my favorite tech race finisher shirt of all time.
- Night-before meal: Homemade chicken and pineapple fried rice (and a Sound Probiotics capsule as always)
- Race day breakfast: cinnamon raisin bagel with peanut butter, orange juice and coffee
- Shoes: Altra Superior 2.0
- Shorts: AST Coaching Patagonia Strider Pro
- Shirt: YWCA of Minneapolis Endurance Sports Team New Balance singlet
- Hydration: Innov-8 Race Ultra 0.25L handheld
- Race nutrition: 8oz water, 8oz lemon-lime gatorade
- Other: 32 oz water poured on head to stay cool
- Race Results
Did anybody race this weekend? How did it go?
This man started running at 61, runs something like 30 races a year, plans to run the Bighorn 30k and the Elkhorn 50k this year just before he turns 90, and aspires to run the Mount Washington Road Race.
Seems like mostly foregone conclusions to me - train more and you’ll get faster. It is interesting to see that the top skiers trained more by running, and more at low intensities! Of course, this doesn’t help the everyday endurance athlete who may not have a whole lot of time to increase the training volume, but it does make me feel better about spending my off-skiing-season mostly running and avoiding the rollerskis! I will take to heart that the top skiers also trained more on skis by skating - my less favorite technique, but the technique which may provide the most fitness gains for a given amount of time.
Welcome to Endurance Every Day!
For the most part, this is going to be a journal, an opportunity to re-live my adventures by writing about them. I find these types of blogs interesting and entertaining to read, so I hope that I can add a little bit of that to the endless rabbit hole of the internet.
But rather than pretending I am a professional athlete and just writing about the fun stuff, I’m hoping to try to capture the unique challenges and benefits of being a regular guy with a regular life and a full time job who also spends most of his free time running around or skiing in the woods for hours on end (and who spends most of what’s left thinking about it). Maybe beyond this being a fun activity for myself and entertainment for others, my experiences can be at least a little bit useful for people in a similar situation.
Enjoy! I intend to always leave comments open on this site, so let me know what you think!