Source code for komoog.gpx

# -*- coding: utf-8 -*-
"""
GPX file handling.
"""

import numpy as np
import gpxpy

[docs]def convert_gpx_tracks_to_arrays(gpx_tracks): """ Take a list of gpx Track objects and convert them to two arrays, one containing the two-dimensional distance covered on the globe, the second containing the elevation. Parameters ========== gpx_tracks : list of gpx.Track list of tracks to convert Returns ======= distance : numpy.ndarray Contains the covered 2D distance in meters. elevation : numpy.ndarray Contains the corresponding elevation profile in meters """ all_points = [] for track in gpx_tracks: for segment in track.segments: these_points = [] for point in segment.points: these_points.append(point) all_points.append(these_points) distance = [] elevation = [] for points in all_points: this_distance = [0.] this_elevation = [points[0].elevation] for A, B in zip(points[:-1], points[1:]): d = A.distance_2d(B) this_distance.append(d+this_distance[-1]) this_elevation.append(B.elevation) this_distance = np.array(this_distance) this_elevation = np.array(this_elevation) if len(distance) > 0: d = np.array(distance[-1]) offset = d[-1] + np.mean(d[1:]-d[:-1]) else: offset = 0. distance.append(this_distance + offset) elevation.append(this_elevation) if len(distance) > 1: distance = np.concatenate(distance) elevation = np.concatenate(elevation) else: distance = distance[0] elevation = elevation[0] # remove duplicates ndx = np.where(np.diff(distance)>0)[0] ndx = np.concatenate([ [0], ndx+1 ]) return distance[ndx], elevation[ndx]
[docs]def convert_tour_to_gpx_tracks(tour): seg = gpxpy.gpx.GPXTrackSegment() for point in tour['coordinates']: seg.points.append(gpxpy.gpx.GPXTrackPoint(point['lat'], point['lng'], elevation=point['alt'])) gpx_track = gpxpy.gpx.GPXTrack() gpx_track.segments.append(seg) return [gpx_track]
if __name__=="__main__": with open('/Users/bfmaier/Downloads/Tour.gpx','r') as gpx_file: gpx = gpxpy.parse(gpx_file) distance, elevation = convert_gpx_track_to_arrays(gpx.tracks) import matplotlib.pyplot as pl pl.plot(distance, elevation) pl.show()