Somehow, every activity I participate in is turned into a geek project. Skiing is no different. This season, I have been carrying around the Garmin GPS that I purchased earlier in the year. It keeps a signal inside my coat and dutifully tracks my position every few seconds.
I can load this into my National Geographic topographical map program and get an interesting view, but I wanted more. I want to know my top speed, how much time I spent in the lift lines, how fast the lift was moving, which lifts I rode the most, etc.
To that end, I’ve started writing a program to analyze the GPS data. The raw statistics are fairly simple and I was able to get a display churned out pretty quickly. Lately I’ve been stuck on trying to automatically figure out when I was on a lift. On the surface, it seems easy: you’re on a lift when you’re going up. That’s not always true. Runs have rises in them and lifts have dips in them. So then I tried to say that any time I’m heading in the same direction for X miles and Y vertical feet then I’m on a lift. Even that has problems. What happens when you get off a lift and keep skiing straight down the backside of the hill? What happens when you get a couple errant GPS points that aren’t in line with the lift? There is enough drift in the data to make it very complicated. If I can’t get the automatic solution figure out, I’m going to have the user tell me where the lifts are the first time and then I’ll save that data. I want to move on to getting either a 2D or 3D map working next. After that I’ll work out a good way to display all the statistics about the day and each individual run.
If you’re interested in seeing the code and/or helping out, it’s all available on codeplex.
The picture below shows the track from my last ski day at Crystal Mt in the National Geographic software. My software will end up looking something like this but with more data and information on the screen.