{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Happy 2017\n", "We have some GPX files which we want to plot on a nice map.\n", "A lot of the the code below is based on [this python4oceanographers blog post](https://ocefpaf.github.io/python4oceanographers/blog/2014/08/18/gpx/)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First we import some packages necessary to achieve what we want." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "import numpy\n", "import gpxpy\n", "import mplleaflet\n", "import glob\n", "import os\n", "import pandas\n", "\n", "plt.rcParams['figure.figsize'] = (16, 9) # Size up figures a bit" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To quickly ingest the GPX files, we write (or actually copy from the aforementioned blog post) a parsing function." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def load_run_data(gpx_path, filter=\"\"):\n", " gpx_files = glob.glob(os.path.join(gpx_path, filter + \"*.gpx\"))\n", " run_data = []\n", " for file_idx, gpx_file in enumerate(gpx_files): \n", " gpx = gpxpy.parse(open(gpx_file, 'r'))\n", " # Loop through tracks\n", " for track_idx, track in enumerate(gpx.tracks):\n", " track_name = track.name\n", " track_time = track.get_time_bounds().start_time\n", " track_length = track.length_3d()\n", " track_duration = track.get_duration()\n", " track_speed = track.get_moving_data().max_speed\n", " \n", " for seg_idx, segment in enumerate(track.segments):\n", " segment_length = segment.length_3d()\n", " for point_idx, point in enumerate(segment.points):\n", " run_data.append([file_idx, os.path.basename(gpx_file), track_idx, track_name, \n", " track_time, track_length, track_duration, track_speed, \n", " seg_idx, segment_length, point.time, point.latitude, \n", " point.longitude, point.elevation, segment.get_speed(point_idx)])\n", " return run_data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For easy handling, we load the GPX tracks in their subfolder to a [Pandas](https://pypi.python.org/pypi/pandas) `dataframe` and display the first few entries of the data frame." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", " | File_Index | \n", "File_Name | \n", "Index | \n", "Name | \n", "Time | \n", "Length | \n", "Duration | \n", "Max_Speed | \n", "Segment_Index | \n", "Segment_Length | \n", "Point_Time | \n", "Point_Latitude | \n", "Point_Longitude | \n", "Point_Elevation | \n", "Point_Speed | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | \n", "0 | \n", "0.gpx | \n", "0 | \n", "2016-12-09 13:57:01 | \n", "2016-12-09 12:57:01 | \n", "2865.836836 | \n", "483 | \n", "9.251168 | \n", "0 | \n", "2865.836836 | \n", "2016-12-09 12:57:01 | \n", "46.945007 | \n", "7.429614 | \n", "536.564941 | \n", "NaN | \n", "
1 | \n", "0 | \n", "0.gpx | \n", "0 | \n", "2016-12-09 13:57:01 | \n", "2016-12-09 12:57:01 | \n", "2865.836836 | \n", "483 | \n", "9.251168 | \n", "0 | \n", "2865.836836 | \n", "2016-12-09 12:57:02 | \n", "46.945055 | \n", "7.429586 | \n", "540.644531 | \n", "9.099847 | \n", "
2 | \n", "0 | \n", "0.gpx | \n", "0 | \n", "2016-12-09 13:57:01 | \n", "2016-12-09 12:57:01 | \n", "2865.836836 | \n", "483 | \n", "9.251168 | \n", "0 | \n", "2865.836836 | \n", "2016-12-09 12:57:03 | \n", "46.945151 | \n", "7.429544 | \n", "541.273682 | \n", "10.243475 | \n", "
3 | \n", "0 | \n", "0.gpx | \n", "0 | \n", "2016-12-09 13:57:01 | \n", "2016-12-09 12:57:01 | \n", "2865.836836 | \n", "483 | \n", "9.251168 | \n", "0 | \n", "2865.836836 | \n", "2016-12-09 12:57:04 | \n", "46.945223 | \n", "7.429530 | \n", "536.550049 | \n", "8.525432 | \n", "
4 | \n", "0 | \n", "0.gpx | \n", "0 | \n", "2016-12-09 13:57:01 | \n", "2016-12-09 12:57:01 | \n", "2865.836836 | \n", "483 | \n", "9.251168 | \n", "0 | \n", "2865.836836 | \n", "2016-12-09 12:57:05 | \n", "46.945287 | \n", "7.429538 | \n", "539.381104 | \n", "6.911977 | \n", "