RU:Using filters with GPSBabel

From OpenStreetMap Wiki
Jump to navigation Jump to search

На этой странице описано использование программы 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 метров к более ранним точкам, используйте фильтр:

   -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