Copy settings from #1 unit
Connect unit via USB. Copy the files from the Settings
,
Elevations
, and Sports
folders. Copy the
Device.fit
file from the Garmin
folder.
Copy settings to #2 unit
Connect unit via GPS and copy the backup files into the same folders
on it. Put Device.fit
into Garmin
,
Settings.fit
into the Settings
folder,
Elevations.fit
into the Elevations
folder,
and Cycling.fit
into the Sports
folder.
All settings and menu configurations will now be available in #2 unit, saving you lots of time recreating them from scratch. Probably works with all Garmin Edge units (tested on 500 series).
W sobotę nagrałem na rowerze ponad 1,5 godziny filmu, który jest podzielony na 3 kawałki -- każdy po 4Gb. Teraz chciałem dodać do niego nakładki z danymi typu prędkość, dystans itp używając Garmin Virb Edit, ale ponieważ Virb Edit nie przetwarza plików większych od 4Gb, to trzeba najpierw połączyć wszystko w jeden plik, jednocześnie zmniejszając rozmiar (można też synchronizować każdy kawałek osobno w VE a potem połączyć, ale ja wolę prościej):
### zamiana na 720p, z redukcją jakości do 23 (domyślnie 20) HandBrakeCLI -w 1280 -l 720 -q 23 -i Plik.mov -o Plik.mp4 --preset="Normal"
Pliki po konwersji jak wyżej mają circa nieco ponad 1Gb każdy.
Teraz trzeba połączyć je do kupy:
MP4Box -cat plik1.mp4 -cat plik2.mp4 -cat plik3.mp4 -new ALL.mp4
Ostatni etap to dodanie nakładek w VE, niestety w tym celu trzeba się przełączyć na MS Windows. Shame...
Według producenta program: łączy nagrania wideo z kamery sportowej VIRB z danymi GPS i innymi informacjami pochodzącymi ze zgodnych urządzeń firmy Garmin. Faktycznie łączy dane zapisane w formacie FIT/GPX z dowolnym plikiem wideo zapisanym w formacie MP4.
VIRB Edit można ściągnąć za darmo ze strony Garmina (dostępne są wersje dla systemów MS Windows/Mac).
Moja niegarminowska kamera zapisuje obraz w formacie MOV (Dane GPS są faktycznie
z urządzenia firmy Garmin, ale równie dobrze mogłyby być ze smartfonu
albo chińskiego loggera.)
Zamieniam plik MOV do formatu MP4
za pomocą aplikacji HandBrakeCLI. Poniższe polecenie wykonuje konwersję,
a wynikowy plik.mp4
będzie około 50% mniejszy niż plik MOV:
time HandBrakeCLI -i PLIK.MOV -o PLIK.mp4 -w 1280 -l 720 --preset="Normal"
Trzydziestominutowy plik MOV, zamieniany jest przez około pół godziny (Linux IntelNuc/i5/8Gb pamięci).
Uparłem się zainstalować HandBrakeCLI w systemie Fedora21, a ponieważ
nie ma stosownych pakietów .rpm
musiałem go skompilować:
yum install yasm zlib-devel bzip2-devel libogg-devel libtheora-devel \ libvorbis-devel libsamplerate-devel libxml2-devel fribidi-devel \ freetype-devel fontconfig-devel libass-devel dbus-glib-devel \ libgudev1-devel webkitgtk-devel libnotify-devel \ gstreamer-devel gstreamer-plugins-base-devel sudo yum groupinstall "Development Tools" "Development Libraries" \ "X Software Development" "GNOME Software Development" yum install lame-libs lame-devel x264-devel intltool tar -xvzf HandBrake-0.10.3.tar.bz2 cd HandBrake-0.10.3 ./configure cd build make make install
W sumie mogłem sobie darować powyższe, bo i tak w końcu muszę używać MS Windows, no ale może ten HandBrake przyda się do czegoś innego.
Na mojej stronie na youtube można obejrzeć wygenerowane za pomocą VIRB filmiki z dodanymi danymi GPS.
Intensywne używanie http://www.gmap-pedometer.com/ spowodowało, iż dotarłem do granic możliwości Legenda, o których NB. do niedawna nie miałem pojęcia. Otóż Legend może przechować do 1000 punktów (waypoints), 20 śladów (tracks) oraz do 50 tras (routes), każda o długości do 250 punktów... Ponieważ punkty trasy liczą się do puli punktów, 5 tras 200 punktowych zawala pamięć ,,na amen''. Co zresztą niedawno miało miejsce...
Usunięcie wszystkich punktów i wszystkich tras z Garmina jest bardzo łatwe. Tyle, że chciałbym niektóre zachować... Można wprawdzie usuwać punkty według związanych z nimi symboli, ale to by wymagało porządku przy ich definiowaniu. A ja, póki co, mam w tym względzie bałagan. Zatem:
Zgrałem zawartość pamięci Garmina do pliku. Wywaliłem wszystkie trasy i ślady oraz związane z nimi punkty (są one łatwo rozpoznawalne po nic nie mówiącej nazwie typu Turn 233 albo GRTP-202). Pozostawiłem pozostałe punkty. (Wywalając trasy trzeba usunąć wszystkie, bo nie wiadomo jaki punkt należy do jakiej trasy -- tak jest szybciej i prościej.)
Wyczyściłem pamięć urządzenia. W tym celu w menu głównym należy wybrać ikonę Waypoints→przycisk menu/find→Delete. Teraz wybrać All Symbols i potwierdzić. Uwaga: przycisk menu/find jest po lewej na dole pod przyciskami góra/dół.
Załadowałem z powrotem plik GPX (nazwałem go LEGEND_MEM.gpx
):
gpsbabel -r -w -t -i gpx -f LEGEND_MEM.gpx -o garmin -F /dev/ttyUSB0
Plik LEGEND_MEM.gpx
zawiera moją bazę podstawowych punktów i tras (jeżeli takowe są)...
Resztę będę ładował w miarę potrzeby, a jak się znowu zapełni pamięć
Legenda, to powtórzę opisaną wyżej procedurę... Przy okazji 225 jako górny limit
punktów na trasie wygląda na zbyt dużo.
Spróbuję 100 punktów, wtedy zmieści się więcej tras....
W opisie tzw. waypointa (punkt nawigacyjny),
w formacie GPX jest m.in. znacznik <sym>
, którego
zawartością jest napis określający symbol punktu. Do tej pory zawsze wstawiałem tam Flag,
a Legend oznaczał taki punkt ikoną niebieskiej flagi.
Wprawdzie teoretycznie to (chyba) może być dowolny napis, ale lepiej ograniczyć się do
tych kilkanastu--kilkudziesięciu, które Garmin zna i ,,reaguje'' na nie
podstawiając odpowiednią ikonę.
Zestaw tychże znalazłem
tutaj. Na stronach
Garmina zaś trudno się doszukać stosownej informacji.
Przykładowo pierwszy z punktów (poniżej) to cmentarz a drugi Miejsce Polowania wybrany na oznaczanie ,,grzybowych miejscówek'' -- ponieważ w zestawie symboli nie ma takiego, który by się lepiej nadawał na oznaczenie miejsca ,,gdzie rosną grzyby''
<wpt lat="54.0704694444" lon="18.9803833333"> <name>Stogi k/M Cment</name> <cmt>Stogi k/M Cment</cmt> <desc>Stogi k/Malborka Cmentarz Mennonitów</desc> <sym>Cemetery</sym> </wpt> <wpt lat='54.84425261' lon='18.000581109'> <name>Boczniak1</name> <cmt>Boczniak Ostrygowaty</cmt> <desc>Boczniak Ostrygowaty na pniu buka</desc> <sym>Hunting Area</sym> </wpt>
Jak już opisałem kiedyś
bazę moich punktów trzymam w pliku (konkretnie w ~/.gps/local.wpts
) co ułatwia jej modyfikowanie.
Jeżeli baza się zmieni, to przesyłam plik (synchronizuję) do urządzenia wykorzystując
program gpsbabel
.
W Garminie odlepiła się gumowa taśma ochronna -- częsty przypadek sądząc z tego co na ww. temat zawiera google. Naprawiłem w sposób szczegółowo opisany przez Mieszko Zagańczyka. W sumie sposób nie sprawdzony tak do końca, ale lepszego nie znalazłem.
Na wypadek gdyby wpis na ww. blogu zniknął podaję skrótowo co należy zrobić. Potrzebne są: silikon akwarystyczny (do akwariów) i benzyna ekstrakcyjna. Benzyną należy oczyścić gumę i odbiornik z resztek kleju. Posmarować silikonem (jedna tubka 8 ml, za 2 PLN) wystarczy. Nałożyć gumę. Owinąć bandażem elastycznym i zostawić owinięte na 24 godziny żeby silikon związał.
Etrex mimo, że nie ma barometru dość sensownie podaje wysokość npm. Jakoś do tej pory umknęło to mojej uwadze.
Poniżej skrypt wyznaczający długość trasy, łączną sumę wysokości
podjazdów (przewyższenie, aka
cumulative elevation gain)
oraz
rysujący profil w postaci pliku PNG. To ostatnie niekoniecznie jest
sensowne, bo GD::Graph::lines
traktuje dane z osi OX jako napisy
a nie liczby i w związku
z tym odstępy między poszczególnymi punktami na tej osi są równe.
Zamiast GD::Graph::lines
trzeba użyć czegoś innego,
np. Chart::Graph::Gnuplot.
#!/usr/bin/perl # # Tworzy plik PNG przedstawiający profil śladu (wysokość mnpm) # z danych podanych (jako argument skryptu) w pliku GPX # tprzechlewski[_at_]gmail.com sierpień/2008 # use XML::LibXML; use Geo::Distance; use Getopt::Long; GetOptions( 'log' => \$print_log, 'pic' => \$print_pic, ); $usage = "Usage: $0 [-p | -l] plik.gpx ;; -p generate PNG file ; -l show log.\n"; my $geo = new Geo::Distance; my $file = shift || die "$usage"; my $parser = XML::LibXML->new; open my $fh, $file || die "problems..."; $doc = $parser->parse_fh($fh); my @tracks = $doc->getElementsByTagName('trk'); my $ptnum=0; for $tx (@tracks) { @segments = $tx->getChildrenByTagName('trkseg'); if ( $name = $tx->getChildrenByTagName('name')->[0] ) { # pierwszy element to nazwa śladu if ($print_log) { print "<!-- track:: ", $name->textContent(), " -->\n"; } } for $sx (@segments) { @points = $sx->getChildrenByTagName('trkpt'); for $px (@points) { @data = $px->getChildrenByTagName('*'); @attrs = $px->attributes(); if ($print_log) { print "-> " ; } for $dx (@data) { if ($print_log) { print $dx->nodeName, " = ", $dx->textContent(), " ; " ; } if ($dx->nodeName eq 'ele') { $ele = $dx->textContent(); push @Elevations, $ele; } } for $ax (@attrs) { if ($print_log) { print " ", $ax->nodeName, " = ", $ax->getValue() ; } if ($ax->nodeName eq 'lon') { $lon = $ax->textContent() } elsif ($ax->nodeName eq 'lat') { $lat = $ax->textContent() } } if ($print_log) { print " ;;\n"; } if ( $ptnum > 0 ) { $curr_dist = $geo->distance( "meter", $plon, $plat => $lon, $lat ); $dist += $curr_dist ; push @Distances, $curr_dist; if (($ele_diff = $ele - $pele ) > 0) { $totalEleGain += $ele_diff ; } } else { push @Distances, 0; } $plon = $lon; $plat = $lat ; $pele = $ele ; $ptnum++; } } } # http://en.wikipedia.org/wiki/Cumulative_elevation_gain (przewyższenie): printf "*** Dist: %.1f meters *** EleGain: $totalEleGain ***\n", $dist; ## Drukowanie profilu trasy unless ( $print_pic ) { exit 0 } use GD::Graph::lines; use POSIX; # floor my $img_file = "${file}.png" ; my @data = (\@Distances, \@Elevations, ); my $mygraph = GD::Graph::lines->new(400, 300); # skip some dates to avoid label overlapping on X-axis: my $x_factor = floor (($#Distances + 1) / 10 ) + 2; print "$#Distances observations. X-axis labels printed evey ${x_factor}th one!\n"; $mygraph->set_text_clr('black'); $mygraph->set( x_label => 'Dist', y_label => '#', title => "# Elev", # Draw datasets in 'solid', 'dashed' and 'dotted-dashed' lines line_types => [1, 1, ], # Set the thickness of line line_width => 2, # Set colors for datasets dclrs => ['blue', 'red', 'cyan'], #x_tick_number => 'auto', x_label_skip => $x_factor, transparent => 0, ## non-transparent bgclr => 'white', fgclr => 'black', borderclrs => 'black', boxclr => '#ede7e7', labelclr => 'black', #axislabelclr, legendclr => 'black', ) or warn $mygraph->error; $mygraph->set_legend_font(GD::gdMediumBoldFont); $mygraph->set_legend('ele', 'ele2', '???'); my $myimage = $mygraph->plot(\@data) or die $mygraph->error; ## for cgi script uncomment: ##print "Content-type: image/png\n\n"; open ( IMG, ">$img_file") or die " *** Problems opening: $img_file ***" ; print IMG $myimage->png; close (IMG); ##print "@Distances\n"; ## debug ##
Wykorzystuję od jakiegoś czasu XML::LibXML
.
W skryptach do obsługi flickr.com korzystałem z XML::Simple
ale do parsowania plików GPX ten pakiet
się nie nadaje -- nie zachowuje porządku elementów (bo je czyta do hasza).
W oczywisty sposób porządek punktów na śladzie nie może być dowolny.
A tutaj ktoś zrobił coś podobnego tyle, że używając Pythona.
Dokupiłem najtańszy odbiornik Garmina pn. Etrex h. Urządzenie to ma monochromatyczny wyświetlacz i nie obsługuje map. Nie ma wysokościomierza jak geko, nie ma też kompasu elektronicznego. Wysokościomierz barometryczny geko wskazywał pi-razy-drzwi a kompas jest niepotrzebny. Etrex pokazuje kierunek bez kompasu, wystarczy się poruszać.
Etrex h (z literą H) ma chipset firmy MTK, tej samej co zrobiła Iblue747. Wyświetlacz tego urządzenia jest duży, litery wyraźne. Łatwiej też wyświetlić bieżący czas na ekranie; w geko wymagało to extra ekwilibrystyki. Z drugiej strony, podgumowane guziki są bardziej toporne niż w geko i trochę trudniej nimi operować.
Wygląda, że urządzenie ma wadę polegającą na błędnym wyliczaniu średniej i przebytej drogi (widać to na zdjęciu obok). Jeżeli podczas wędrówki wyłączę Etrexa a następnie włączę -- przy ograniczonej widoczności nieba -- na ekranie pojawiają się wyniki typu 2000 km/h. Na szczęście zapisany ślad jest OK, nie ma na nim punktów z Afryki czy Hondurasu. Niby nie jest to wada z gatunku mocno uciążliwych, ale denerwuje. No co tu dużo mówić: bubel.
Porównanie śladów iblue, etrexa oraz geko jest tutaj (czerwony ślad to etrex, niebieski iblue, turkusowy geko 301). Etrex wyłączył się nie wiedzieć czemu w pewnym momencie.
Ślady w różnych kolorach wymagały drobnych zmian
w bibliotece
gpx-viewer Kaza Okudy.
Oryginalna biblioteka rysuje tylko na czerwono a moja modyfikacja zmienia kolor
dla każdego
elementu <trk>
zawierającego <cmt>
(por. GPX 1.1).
Zmiana koloru dla każego elementu trk
nie byłaby
dobrym pomysłem, bo ślad pobrany z GPSa często jest dzielony na wiele
elementów trk
.
Dodanie cmt
ma wymusić
zmianę koloru na żądanie.
GPSbabel nie wstawia cmt
do śladu pobieranego z urządzenia.
Zrezygnowałem wreszcie z używania do komunikacji z GPSem programu GPSman na rzecz GPSBabela. Ten pierwszy jest programem interaktywnym a przez to niezbyt wygodnym bo trzeba się trochę naklikać żeby przegrać zawartość pamięci Geko na PC. GPSBabel działa w trybie wsadowym, dzięki czemu można oszczędzić dużo (cennego) czasu:
#!/bin/bash TODAY=`date +"%Y%m%d"` # zapisz do pliku yyyymmdd.gpx gpsbabel -t -r -w -i garmin -f /dev/ttyS0 -o gpx -F "$TODAY.gpx"
Przyznać muszę, że podchodziłem do tego GPSBabela jak do jeża bo przy poprzednich próbach coś mi tam nie działało. A niesłusznie -- wystarczyło przeczytać dokumentację.
Najwięcej czasu straciłem zresztą na podłączeniu Garmina do komputera.
Mój Geko 301
jest podpięty do PC standardowym ,,fabrycznym'' kablem
pn. RS232 serial port connector
(part number: 010-10310-00). Port szeregowy, tj. /dev/ttyS0
w nomenklaturze Linuksa, w FC5 jest dostępny tylko dla superużytkownika.
BTW mam poczucie, że wcześniej był dostępny dla wszystkich.
Kłopot ten rozwiązałem w sposób przedstawiony
tutaj:
ls -l /dev/ttyS0 crw-rw---- 1 root uucp 4, 64 gru 18 2007 /dev/ttyS0 /usr/sbin/usermod -G uucp tomek # dodanie tomka do grupy uucp
Uwaga: program usermod
działa tak, że jeżeli
użytkownik jest obecnie członkiem grupy, której nie podano na
liście--wartości opcji -G
, to zostanie z niej usunięty.
Lepiej więc zwyczajnie uruchomić vi
i dopisać co trzeba
do /etc/groups
.
Mając już zgrany ślad (track) i punkty (waypoints)
zacząłem kombinować co dalej z tym robić. Sposób w jaki publikuję
moje ślady korzysta
z biblioteki
gpx-viewer
Kaza Okudy. Każdy punkt z pliku GPX jest przedstawiony w postaci
standardowej ,,pinezki'' znanej z google maps. Pinezka po
kliknięciu zamienia się w okienko zawierające zawartość
elementów-dzieci elementu wpt
(tj. ele
,
name
, cmt
, desc
oraz sym
)
oraz atrybuty tego elementu (lat
i lon
), np.:
<wpt lat="54.443087485" lon="18.540491704"> <ele>69.340332</ele> <name>168</name> <cmt>168</cmt> <desc>168</desc> <sym>Flag</sym> </wpt>
Gdyby ww. element zawierał element extension
, to
pokazana by była tylko zawartość extension
.
W przykładach ze strony Okudy extension
zawiera
element img
zawierający z kolei zdjęcie
zrobione w tym właśnie miejscu:
<wpt lat="49.237919" lon="-122.760106"> <ele>4.0</ele> <name>Photo 2</name> <extensions><html><![CDATA[ <a href="http://okuda.blogspot.com/2005/07/traboulay-poco-trail.html" target="_blank"> <img src="blog/2005-07/IMG_2370-01.jpg" /> </a> ]]></html></extensions>
Teraz mała dygresja: odsyłacze do zdjęć na flickr.com są tworzone według pewnego schematu.
Strona główna zdjęcia ma adres http://www.flickr.com/tprzechlewski/<photo_id>/
, gdzie
<photo_id>
oznacza identyfikator zdjęcia.
Plik ze zdjęciem ma zaś następujący URL:
http://static.flickr.com/<server>/<photo_id>_<secret>_<size>.jpg
Wartości <server>
oraz <secret>
można ustalić
np. poprzez wykonanie metody flickr.people.getPublicPhotos
.
Wartościami size
są s
(square), t
(thumbnail), m
(small), b
(large), o
(original). Oznaczają one odpowiednio pliki o wielkościach
75, 100, 200, 1024 pikseli i wielkość oryginalną. Rysunek typu
square to kwadrat, pozostałe to prostokąty o dłuższym boku
równym podanej licznie pikseli. Prostokąt o dłuższym boku równym 500 pikseli
to wielkość zdjęcia, która jest wyświetlana na stronie głównej zdjęcia.
Ta wielkość
jest wybierana jeżeli URL nie zawiera części _<size>
.
Ja chciałem żeby element img
wewnątrz extension
w pliku GPX
wskazywał na zdjęcie w rozmiarze thumbnail
na flickr.com a element a
odsyłał na stronę główną tego zdjęcia. Żeby nie wpisywać
kodu ręcznie wymyśliłem to następująco.
Za pomocą skryptu
flickr_getphotolist.pl
pobieram informacje nt. wszystkich zdjęć (publicznych, ale to ograniczenie
akurat jest OK). Skrypt zapisuje informacje w postaci następującej listy haszy:
@photos = ( {'owner' => '20425995@N00','isfriend' => '0','ispublic' => '1','secret' => '95826dcd42',\ 'farm' => '3','title' => 'dscf1209','server' => '2343','id' => '1747402167','isfamily' => '0'}, ...
do pliku ~/.flickr/hr.icio.ph
. Prosty skrypt zwraca kompletne
adresy URL po podaniu tytułu zdjęcia (działa przy założeniu, że tytuły są unikatowe):
#!/usr/bin/perl require "$ENV{HOME}/.flickr/hr.icio.ph" ; $photo_title = shift; for (@photos) { if ($photo_title eq $_->{title} ) { print "<extensions><html><![CDATA[ <a href=\"http://www.flickr.com/tprzechlewski/$_->{id}/\" target=\"_blank\"> <img src=\"http://static.flickr.com/$_->{server}/$_->{id}_$_->{secret}_t.jpg\" /> </a> ]]></html></extensions> \n"; } }
Teraz wystarczy dopisać w .emacs
funkcję, która w miejscu wywołania albo zapyta
o tytuł zdjęcia, albo pobierze go sama z wiersza gdzie jest kursor po czym wstawi to co
wypluje ww. skrypt do Emacsowego bufora. Genialne:-)
Na próbę dodałem zdjęcia do śladu
wygenerowanego 16. 12. 2007 r.
BTW patrząc na ten dziwny ślad nie mogę się powstrzymać od sarkazmu, mając w pamięci opinię niejakiej squishy z forum flickr.com: ... it's smaller than many cell phones and I think it's fabulous. I just turn it on and toss it in a backpack, then download the track log later to sync with photos... Gdzie ona mieszka? Na pustyni Gobi? Albo pracuje w Garminie... Albo to sync with photos jest plus/minus 10 kilometers. Bo mój geko 301 prawie zawsze zgubi ślad w trudnym terenie typu las, duże budynki, głębokie doliny itp...
Okazało się, że w sobotę (28 lipca) mój Garmin Geko 301 nie tylko przestawił magicznie
częstotliwość zapisu śladu, ale także cofnął się w czasie. W rezultacie kilka wpisów ,,zachodzi''
chronologicznie na siebie. Wyszło to dzisiaj, gdy usiłując wyciąć
kawałek śladu przy pomocy programu gpsbabel
uruchomionego
w następujący sposób (por.
Data Filters):
gpsbabel -t -i gpx -f plik-we.gpx -x track,start=2007081907,stop=2007081915 -o gpx -F plik-wy.gpx
otrzymałem:
trackfilter-init: Track points badly ordered (timestamp)!
Nie wiem czemu tak się stało. Mniejsza z tym. Zamiast ręcznie poprawiać błędne
wpisy można spróbować dodać opcję merge
,
która łączy wszystkie ślady w jeden usuwając
,,części wspólne'' (jeżeli ślady nie zachodzą na siebie można zamiast merge
,
użyć pack
)
gpsbabel -t -i gpx -f plik-we.gpx -x track,merge,start=2007081907,stop=2007081915 \ -o gpx -F plik-wy.gpx
Powyższe wytnie ślad utworzony od siódmej do piętnastej, 19 sierpnia 2007 r. BTW: do ściągnięcia zawartości Geko na dysk użyłem następującego skryptu:
#!/bin/bash # http://wiki.openstreetmap.org/index.php/How_to_get_data_from_a_Geko_201 filename="`date +%y%m%d-%H%M`" echo "creating $filename-waypoints.gpx" gpsbabel -i garmin -f /dev/ttyS0 -o gpx -F $filename-waypoints.gpx sleep 2 echo "creating $filename-tracklog.gpx" gpsbabel -t -i garmin -f /dev/ttyS0 -o gpx -F $filename-tracklog.gpx
Do tej pory używałem okienkowego programu gpsman
;
gpsbabel
jest wygodniejszy bo nie trzeba klikać, tyle że
gpsman
potrafi wyświetlić ślad, co czasami się może
przydać, więc nie skreślam go ostatecznie.
W sobotę (28 lipca) mój Garmin Geko 301 na chwilę się przestawił magicznie i rejestrował --przez dłuższy czas--położenie co sekundę. Powstały w rezultacie ślad (trace) miał ca 0,5Mb, znacząco więcej niż normalnie. Ponieważ stało się to po raz pierwszy byłem nieco zaskoczony, co z tym fantem począć. Wysyłanie tego do mojego repozytorium tras rowerowych nie miało sensu. Po krótkiej interakcji z Google znalazłem sposób na rozwiązanie mojego problemu na stronie wiki.openstreetmap.org:
gpsbabel -i gpx -f plik-we.gpx -x simplify,count=500 -o gpx -F plik-wy.gpx