Project

piste_pal

0.0
No release in over 3 years
Low commit activity in last 3 years
A Ruby Gem that helps calculate Skiing statistics from GPS data.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 2.0
~> 11.0
~> 10.0
~> 3.0

Runtime

= 1.10.4
~> 10.0
 Project Readme

PistePal

Gem Version

Fill your time off the slopes thinking about them. This gem takes .gpx files from popular activity tracking apps and turns them into fun stats.

The code can be accessed at a high level by "purchasing" either Day Passes or Season Passes, but most of the functionality is modularized to allow you access to the stats you want.

It is tailored for .gpx files exported from the Slopes app for now.

Installation

Add this line to your application's Gemfile:

gem 'piste_pal'

And then execute:

$ bundle

Or install it yourself as:

$ gem install piste_pal

Usage

require 'piste_pal'

# "Purchase" your day pass with a single .gpx data object

gpx_data = File.read('/path/to/gpx/file')
sundance = PistePal::DayPass.purchase(gpx_data)

sundance.resort                         # Sundance Mountain Resort
sundance.date                           # 2019-03-01 00:00:00 -0700
sundance.maximum_speed                  # {:value=>30.290415, :unit=>"mph"}
sundance.peak_altitude                  # {:value=>8261.18916855752, :unit=>"feet"}
sundance.vertical                       # {:value=>3797.6879430483204, :unit=>"feet"}
sundance.distance                       # {:value=>4.796952318157319, :unit=>"miles"}
sundance.tallest_run                    # {:value=>1282.958728718721, :unit=>"feet"}
sundance.longest_run                    # {:value=>1.9052295991405417, :unit=>"miles"}
sundance.runs                           # [[@trackpoint1, @trackpoint2, ...], [@trackpoint1, @trackpoint2, ...]]
sundance.lifts                          # [[@trackpoint1, @trackpoint2, ...], [@trackpoint1, @trackpoint2, ...]]

# Or, purchase a season pass with an array of .gpx data objects

season_data = []
season_data.push(File.read('/path/to/gpx/file1'))
season_data.push(File.read('/path/to/gpx/file2'))
season_data.push(File.read('/path/to/gpx/file3'))

season = PistePal::SeasonPass.purchase(season_data)

season.days                             # [<PistePal::DayPass>, <PistePal::DayPass>, ...]
season.days(timestamp_only: true)       # [2019-03-30 00:00:00 -0600, 2019-03-01 00:00:00 -0700, ...]
season.runs                             # 134
season.resorts                          # ["Sundance Resort", "Solitude Mountain Resort", "Park City Mountain Resort"]
season.vertical                         # {:value=>51900.38487275453, :unit=>"feet"}
season.distance                         # {:value=>52.35386405859661, :unit=>"miles"}

Contributing

Bug reports and pull requests are welcome on GitHub. No PR is too small.

Some things that need cleaning up / fixing:

  • Should probably write some tests...
  • Cleaner, more comprehensive way to handle different measurement systems (Metric vs. Imperial). I have this half-baked in some places but it could use a lot of improvment.
  • Save trackpoint nodes to object and only extract data when necessary -- that is, only calculate the maximum_velocity when that method is invoked
  • Check compatibility with files exported from other Apps (right now it is mostly tailored towards the "Slopes" app)

License

The gem is available as open source under the terms of the MIT License.