Вырезание из GPS трека ошибочных точек


В продолжение темы обучения использования GPS навигатором и результатами его плодов.

Покатался я с СитиГидом, и записывал и треки поездки. При этом иногда мобилка показывала, что я нахожусь совсем не там, где я находился на самом деле. В итоге, на треке иногда возникают очень интересные телепортации на большие растояния.

Пообщался с GPS владельцами и рассказали они, что такое бывает достаточно часто, особенно на дешевых жпсках. Сначала была мысль кинуть на форум Ситигида просьбу как-то это править на ходу. Потом появилась мысль, что по идее, ПО должно писать то, что ему дают, а уж потом можно обрабатывать как вздумается.

Пришлось искать, кем можно поправить трек с наименьшими затратами. Нашлась мегасофтина - GPSBabel.

С Wiki

GPSBabel — свободная кроссплатформенная программа для конвертирования между форматами геоданных (точек и треков).
GPSBabel иногда используется в различных проектах как средство преобразования форматов.

Дальше смотрел по статье Как добавить геотаги к фотографиям

Похоже, самые универсальный и мощный инструмент для обработки треков — GPSBabel. В случае, если я хочу сразу взять активный трек с устройства Garmin, подключенного к /dev/ttyUSB0, команда будет выглядеть так:

$ gpsbabel -t -w -i garmin -f /dev/ttyUSB0 -x radius,distance=3K,lat=45.058646,lon=6.907375 -x track,pack -x discard,hdop=3,vdop=3 -x position,distance=5m -x interpolate,time=60 -o gpx -F мойтрек.gpx

где параметры коммандной строки означают следующее:

-i garmin -f /dev/ttyUSB0 говорит брать исходные данные прямо с устройства Garmin подключенного по USB (если исходные данные уже доступны в виде GPX-файла, можно заменить на -i gpx -f исходный-трек.gpx, если исходных GPX-файлов несколько, то можно указать их всех, напримее -i gpx -f 20080621.gpx -f 20080622.gpx -f 20080623.gpx -f 20080624.gpx);
-t -w говорят брать с устройства информацию только о треках (-t) и точках маршрута (-w) — точки маршрута включаю, потому что трек мне пригодится и для других целей;
-x radius,distance=3K,lat=45.058646,lon=6.907375 — это фильтр, отсекающий всё, что не входит в круг радиусом 3 км относительно заданной точки (необязательно);
-x track,pack — этот фильтр объединяет треки отдельных переходов в один большой;
-x discard,hdop=3,vdop=3 — этот фильтр выбрасывает из трека точки, для которых горизонтальная или вертикальная мера ошибки больше 3 (как HDOP и VDOP связаны с метрами), на практике этот фильтр действительно эффективно отсеивает точки внезапно «выскочившие» из траектории, значение «3» эмпирическое, иногда я указываю даже «10»;
-x position,distance=5m — объединяет точки, расстояние между которыми меньше 5 м (короткие остановки);
-x interpolate,time=60 — интерполирует трек так, чтобы между соседними точками было не более 60 секунд (это один из самых полезных фильтров для создания геотагов!);
-o gpx -F мойтрек.gpx — сохраняет результат в файл мойтрек.gpx в формате GPX.

В итоге у меня получился скриптик для объединения двух файлов со всеми находящимися там GPS треками, удалением ошибочных точек и уменьшением общего количества точек для уменьшения размера файла трека.

gpsbabel.exe -p "" -r -i gpx -f "%1" -f "%2" -x discard,hdop=3,vdop=3 -x simplify,count=%3 -x track,pack -o gpx -F "out-%1"

%1, %2 - первый и второй треки
%3 - сколько оставить точек

В приложении gpsbabel под винду, который должен заработать без установки.


ВложениеРазмер
gpsbabel.exe1.01 МБ