NikePlus Running Map

2014.07.29

Inspired by Garrett Miller's (relatively) recent blog post, Mapping Moves, I decided to do something else with all my NikePlus data and create a map of my runs. Unfortunately for me, the Nike data is more difficult to liberate than from other sources. Fortunately for me, and anyone else trying to do this, there are some pre-existing tools to solve this issue.

2012 in blue, 2013 in orange, 2014 in green. View fullscreen

Before starting

Get these things:

The data

First, I used Matt Stuehler's site (again) to export all of my runs as .gpx files. If you have trouble exporting them all at the same time, it helps to break them up into 30-40 run groups.

The easiest way to import this data into TileMill is going to be as a .geojson file but it will help if we have our data a little more organized before converting. I had three years of data so I decided that I would eventually want to style it by year. Here's the folder structure I used:

Folder Structure

The Python file in each folder is a slight modification of one used for OpenStreetMap exports. I'm going to post it here because I don't like having to clone a GitHub repo just to grab one file.:

from bs4 import BeautifulSoup
import glob
import time

output_file_name = "merged.gpx"

fo = open(output_file_name, "w")
fo.write('<?xml version="1.0" encoding="UTF-8"?>')
fo.write('<gpx version="1.0">')

gpx_list = glob.glob('*/*.gpx')

for gpx_file_name in gpx_list:
    print "Parsing "+gpx_file_name+" ..."

    fi = open(gpx_file_name,"r")
    gpx_trace = fi.read()
    fi.close()

    soup = BeautifulSoup(gpx_trace)
    fo.write(soup.trk.prettify())

    time.sleep(1)

fo.write('</gpx>')
fo.close()

Copy this, save it as gpx-merger.py, and put one in each folder structure like I did above (it needs to be one folder "below" the data it is aggregating). To run it, navigate to that folder in the command line/terminal and type python gpx-merger.py. Sit back and wait.

Terminal gif

Each time you run it in a new place, it will output a file called merged.gpx. Now you can pretty much follow the rest of Garrett's blog post:

Styling tips

filter settings