RU:Using filters with GPSBabel
На этой странице описано использование программы GPSBabel для редактирования треков с помощью фильтров. Дополнительную информацию по этой теме вы найдете на странице Создание GPX-треков.
На этой странице описано использование фильтров из командной строки. Для вариантов с графическим интерфейсом выберите альтернативные программы в редактировании GPX-треков.
Введение
Gpsbabel позволяет вам фильтровать ваши данные. В нем можно редактировать треки, маршруты и путевые точки. Не все фильтры предназначены для каждого из этих трех типов данных, сверьтесь с описанием возможностей gpsbabel прежде чем пробовать.
Параметры фильтра указываются между параметрами ввода и вывода и имеют следующий формат:
-x <название_фильтра>,<параметр_фильтра1>,<параметр_фильтра2>...
Пара слов о проблемах парсинга в JOSM
gpsbabel может создавать GPX-файлы, которые JOSM не сможет загрузить, выдав следующее сообщение об ошибке:
В окне ошибок: Could not parse file В консоли: The prefix "gpxdata" for element "gpxdata:hr" is not bound.
В этом случае решить проблему можно удалением все строк "gpxdata:" из GPX-файла. На Unix-системах проблему решает такая команда:
sed 's/gpxdata://g' IN.gpx > OUT.gpx
Фильтрация точек в пределах заданного радиуса
Эта команда на входе берет два GPX-файла, а на выходе дает один GPX-файл merge.gpx, в котором будут лишь путевые точки в пределах 5-километрового радиуса от точки с координатами 40.75N, 119.25W.
gpsbabel -i gpx -f way_iii.gpx -f way_rino.gpx \ -x radius,distance=5M,lat=40.75,lon=-119.25 \ -o gpx -F merge.gpx
Исключение точек внутри заданного радиуса (например, в целях приватности)
Когда вы загружаете треки, вы можете (или даже должны) быть обеспокоены тем, что ваше начальное и конечное местоположение может быть легко и/или точно определено, потому что это зачастую места, где вы или ваши родственники живете или работаете.
Следующая команда удалит все точки в пределах круга, очерчивающего эти "приватные зоны". Подберите соответствующую широту, долготу и радиус для ваших нужд.
gpsbabel -i gpx -f in.gpx \ -x transform,wpt=trk,del \ -x radius,distance=1.1K,lat=40.01,lon=10.001,nosort,exclude \ -x transform,trk=wpt,del \ -o gpx -F out.gpx
Дистанция (distance) указывается в километрах (K) или милях (M). (Команда объединит несколько треков в один.)
Также вы можете совместить несколько команд "-x radius", например:
- для начальной и конечной точек треков сразу;
- если у вас несколько "приватных зон" (дом, офис, друзья...);
- если вы параноик: собственно говоря, если у вас есть хоть один трек, на котором вы несколько раз заходите и выходите из определенного круга, довольно легко определить вашу "приватную зону" даже по обрезанному треку. Чтобы избежать этого, поставьте случайным образом несколько фильтров со случайно расположенными центрами вокруг настоящих "приватных зон".
Удаление сохраненных треков
На устройствах Garmin старые треки могут быть сохранены и сжаты. Эти треки всегда будут загружаться, если только их не отфильтровать. Так как у них нет временного штампа и поскольку они сжаты, они также могут создавать проблемы в JOSM во время привязки изображений к координатам. Следующий фильтр оставит только треки с параметром ACTIVE в заголовке.
-x track,name="ACTIVE *"
Удаление дубликатов и близко расположенных точек
Чтобы удалить дублирующиеся точки, используйте фильтр:
-x duplicate,location
Чтобы удалить точки, расположенные ближе 5 метров к более ранним точкам, используйте фильтр:
Во всех текущих версиях gpsbabel наблюдается баг с потерей данных при использовании фильтра position (см. http://sourceforge.net/mailarchive/message.php?msg_id=27158444, а также Страницу обсуждения) |
-x position,distance=5m
Дуговой фильтр
Вы можете конвертировать записанный трек в файл траектории GPSBabel, а затем отфильтровать путевые точки в зависимости от их близости к этой траектории или маршруту, используя '-x arc filter'.
Оптимизация треков
В gpsbabel можно легко оптимизировать трек, уменьшив количество точек в нем (в примере ниже – до 400 точек). Эта процедура особо не повлияет на точность, хотя это зависит от трека. Например, в поездках на велосипеде GPS захватывает 2 точки в секунду. Мне удавалось упростить трек с 8.000 до 400 и даже до 100 точек без особых побочных эффектов.
gpsbabel -i gpx -f way_iii.gpx \ -x simplify,count=400 \ -o gpx -F merge.gpx
Другой вариант – использовать фильтр для пересекающихся точек. Он отбрасывает точки, которые расположены слишком близко к линии между двумя соседними точками. Таким образом, форма трека остается практически неизменной. Если представить оптимизацию треков как процесс сжатия, то вышеприведенный пример ужмет трек до заданного размера, в то время как команда, представленная ниже, сохранит качество трека независимо от размера. Точки будут удалены, если они расположены не далее 1 метра, т.е. 0,001 километра (k) от трека.
gpsbabel -i gpx -f way_iv.gpx \ -x simplify,crosstrack,error=0.001k \ -o gpx -F merge.gpx
Вы также можете использовать Potlatch для оптимизации трека. Загрузите его в OSM, затем кликните ссылку "edit" рядом с загруженным треком (не перепутайте со вкладкой "edit" вверху страницы), и кликните "Track", когда откроется Potlatch.
Удаление недостоверных точек
-x discard,hdop=4
Временные фильтры
Оставить только данные, записанные после 2008-07-23 20:00
gpsbabel -t -w -i garmin -f /dev/ttyUSB0 -x track,start=2008072320 -o gpx -F waypoint.gpx
Слияние треков
Чтобы объединить несколько GPX-треков в один (собственно, эта опция не делает один трек, а скорее создает один файл, содержащий несколько треков):
gpsbabel -t -i gpx -f track1.gpx -f track2.gpx -f track3.gpx -o gpx -F combined-tracks.gpx
Вместо перечисления каждого gpx-файла можно использовать небольшой скрипт вроде этого:
#!/bin/bash # Append multiple gpx files easily # Save this as merge_gpx.sh # Use: for example, to merge all files that start with 'track_2013' in the current folder, do: # merge_gpx.sh track_2013*.gpx gpsbabel -i gpx $(echo $* | for GPX; do echo -n " -f $GPX "; done) \ -o gpx -F appended.gpx