20080918

Визуализация профилей высоты и скорости GPS-треков

Помимо нанесения GPS-трека на карту, одним из наиболее интересных способов его представления является, на мой взгляд, построение графика изменения высоты или скорости движения как функции пройденного расстояния или прошедшего времени. Такие графики я называю «профилями» трека.

Нарисовать такие графики можно, например, воспользовавшись сайтом gpsvisualizer.com. Однако мне не очень нравится иметь их метку на картинке (раз) и не иметь свободного ПО, чтобы проделать это же самое на своём собственном компьютере (два).

Так что предлагаю свой скрипт gpxplot, который строит такие графики по данному GPX-файлу. Прямая ссылка на скрипт: gpxplot.py. Собственно, тут всего две важных особенности:

1) GPX-файл может содержать несколько несвязных треков, каждый из которых может состоять из нескольких «сегментов», поэтому хотелось сохранить возможность показывать их на графике именно как отдельные участки трека.

2) Информации о пройденном расстоянии в GPX-файле нет. Скрипт рассчитывает его в предположении сферической формы земли. Думаю, для большинства приложений этого достаточно.

Будучи запущен без параметров, скрипт просто печатает таблицу с данными по всеми точкам трека. Построить какой угодно график по такой таблице можно в любой программе.

Скрипт может также построить график самостоятельно (с помощью gnuplot). Для этого используется опция -g:
$ ./gpxplot.py -g -x time -y elevation track.gpx
Если модуль python-gnuplot установлен, то картинка появится на экране. Если такого модуля нет, то будет напечатан скрипт для gnuplot. В этом случае запустить gnuplot можно так:
$ ./gpxplot.py -g -x time -y elevation track.gpx | gnuplot -persist -
Как уже, наверное, понятно, -x time указывает откладывать по оси абсцисс время (-x distance — пройденный путь), а -y elevation — откладывать по оси ординат высоту (-y velocity — скорость).

Чтобы сохранить результат в файл, указываем опцию -o имяфайла:
$ ./gpxplot.py -g -x time -y elevation -o track.png track.gpx
Поддерживаются форматы: SVG, EPS, PNG, JPG.

Указать местную временную зону можно опцией -t имя_зоны:
$ ./gpxplot.py -g -t 'Europe/Moscow' track.gpx
В этом случае необходимо присутствие в системе модуля pytz.

Получается примерно так:

пример графика в формате SVG

Может быть, в будущем добавлю всякую раскраску и украшательство графиков. Вероятно, добавлю другие механизмы отрисовки графиков (matplotlib, например). Было бы интересно сделать отрисовку средствами Google Charts (тогда уже и до веб-версии недалеко).

Впрочем, главное назначение скрипта — просто вытянуть из GPX файла данные нужные для построения профилей. Предварительную обработку и фильтрацию треков предлагаю делать с помощью gpsbabel.

Дополнение 2008-10-17: Скрипт заметно обновился, появилась поддержка Google Charts, а также теперь доступна онлайн-версия.

Ссылки:
скрипт для визуализации профилей высоты GPS-треков
Visualizing altitude and velocity profiles of GPS tracks
GPXplot онлайн