Adam DziukŁukasz RycombelTadeusz GawełMarek KolachaDamian LangnerRafał FormickiKrzysztof Pałęga

Hi. Nazywam się Paweł. W dziale tym chciałbym poruszyć kilka tematów związanych z nawigacją terenową za pomocą urządzeń z systemem Android, oraz możliwością jej wykorzystania w turystyce i sporcie. Od dawna czułem potrzebę zgromadzenia tych informacji w jednym miejscu. Być może niektóre czynności opisane tutaj można wykonać szybciej i prościej. Ja jednak przedstawię to, co stosuję z powodzeniem od kilku lat. Na początek mały spis sprzętu i oprogramowania, jaki posłużył mi do przygotowania tekstu.

Od strony systemu Android używałem:

  • telefonu Sony Xperia Active (Android 4.0.4);
  • nawigacji OruxMaps (6.5.6, bezpłatna).

Od strony komputera PC używałem:

  • RouteConverter (2.17, bezpłatny);
  • Mobile Atlas Creator - MOBAC (1.9.16, bezpłatny);
  • OruxMaps Desktop (2.1 beta, bezpłatny);
  • OKMap (10.12.2, bezpłatny);
  • GPSBabel (1.5.2, bezpłatny);
  • GIMP (2.8.16, bezpłatny);
  • PhotoScape (3.7, bezpłatny);
  • Adobe Photoshop oraz Adobe Illustrator;
  • języka programowania Python (2.7.7, bezpłatny);
  • strony internetowej www.gpsvisualizer.com (bezpłatna).

Kilka słów na temat samego telefonu - jest to stary (rocznik 2011) model telefonu Sony dla ludzi aktywnych. Komfort działania może trochę trąci myszką, natomiast uważam, że jest to idealny sprzęt do nawigacji turystycznej. Jest mały - można go obsługiwać jedną ręką, jest wodoszczelny i pyłoszczelny, jest w stanie korzystać z sygnału satelitów w systemach GPS i Glonass. Bateria ma niewielką pojemność, ale nowa starcza na około 12h rejestracji sygnału GPS, oraz na jakieś 6-8h nawigacji ze stale włączonym ekranem, OruxMaps oraz Endomondo. Cena za używany model na Allegro... śmieszna, w porównaniu z urządzeniami Garmin.

Od razu zaznaczę, że jako nawigacja sprzęt ten sprawdza się bardzo dobrze, ale przy jednoczesnym używaniu nawigacji z funkcjami telefonu występują problemy. Nie chodzi tutaj nawet o szybkość działania - po prostu taka kombinacja lubi zawiesić telefon, tudzież stracić na dłużej sygnał z satelity. Rozwiązania są dwa - albo włączony tryb samolotowy (sprawdzane setki razy, zero problemów), albo podmiana adresu serwera NTP w telefonie (tak czy siak - telefon czasem się powiesi).

Do rzeczy. W artykule tym chciałbym poruszyć następujące zagadnienia:

  1. Źródła map elektronicznych
  2. Podstawy obsługi OruxMaps
  3. Konwersja map Compass do OruxMaps
  4. Konwersja map internetowych do OruxMaps
  5. Tworzenie śladu GPX
  6. Nawigacja po śladzie GPX
  7. Nałożenie śladu GPX na mapę OziExplorer w OKMap
  8. Nałożenie śladu GPX na mapę rastrową w programie graficznym
  9. Tworzenie profilu wysokościowego
  10. Jaka jest poprawna suma przewyższeń?
  11. Czy da się naprawić uszkodzony ślad z Endomondo?
  12. Mapa hipsometryczna Jury

Mapy w formacie elektronicznym można pozyskać na dwa sposoby - zakupić je, lub dokonać konwersji jednej z bezpłatnych map internetowych do pliku.

Jeśli chodzi o mapy płatne/komercyjnie to osobiście jestem przyzwyczajony do map krakowskiego wydawnictwa kartograficznego Compass. Mieszkam na Jurze Krakowsko-Częstochowskiej, a mapy te zawsze zapewniały najlepszą dokładność odwzorowania okolicy. Elektroniczne wersje map możemy zakupić w formacie TrekBuddy, w cenie około 10-25zł za mapę. Po zakupie link do pliku otrzymujemy na skrzynkę pocztową w ciągu kilku minut.

Bezpłatnie mapy ściągnąć możemy za pomocą MOBile Atlas Creator - MOBAC. Źródłem mogą być tutaj serwery OpenStreetMap, UMP-pcPL, a w starszych wersjach programu także Google, BING, EMapi.pl i OVI/Nokia.

Wcześniej dość długo używałem TrekBuddy. Program całkiem fajny, ale szybko zauważyłem w nim pewne ograniczenia, nie wspominając o niestabilnym działaniu. Skorzystałem więc z rady jednego z kolegów i dałem szansę OruxMaps. Byłem nastawiony sceptycznie, ale.. ten program jest w stanie przekonać do siebie największą marudę. Jeśli pomyślimy, że program do nawigacji turystycznej powinien posiadać jakąś opcję, to OruxMaps posiada ją na pewno. Jego używanie to czysta przyjemność. Wstyd, że iOS do tej pory nie posiada aplikacji, która byłaby choćby w ułamku tak dobra.

Program możemy pobrać bezpłatnie ze sklepu Google Play. Dostępna jest też wersja Donate, za którą musimy zapłacić symboliczną kwotę. Obie wersje nie różnią się absolutnie niczym.

Okno główne programu OruxMaps

Tak jak napisałem wcześniej, program posiada ogrom funkcji, ciężko byłoby je wszystkie, nawet pobieżnie, opisać. Przybliżę jedynie kilka tych, z których korzystam najczęściej - czyli służące do prostej nawigacji w terenie.

Podstawowym zadaniem programu jest wyświetlenie mapy z naniesioną, zgodnie z danymi GPS, pozycją użytkownika. Pierwszą rzeczą jest więc załadowanie odpowiedniej mapy. W górnym menu "Mapy" należy wybrać opcję "Nowa Mapa". W dwóch zakładach "Online" i "Offline" pojawią się wszystkie dostępne mapy. Standardowo program obsługuje mapy online z kilku źródeł, np. OpenStreetMap i 4UMaps (wymaga to połączenia internetowego), oraz mapy offline, które muszą być wcześniej umieszczone w pamięci telefonu. Oprócz tego w menu "Mapy" znajdują się jeszcze dwie przydatne funkcje: "Mapa 3D" (tutaj nie potrzeba chyba opisu, funkcja wymaga pobrania dodatkowych danych wysokościowych z Internetu) oraz "Tryb mapy" (np. mapa obracana zgodnie z wskazaniami kompasu w telefonie, zgodnie z kierunkiem trasy, czy normalna, z "północą" zawsze na górze).

Jeśli załadowaliśmy mapę, to pozostaje włączyć GPS - albo w panelu po prawej, albo w górnym menu "Ślady" poprzez funkcję "Start Gps". Po chwili aktualna pozycja powinna zostać naniesiona na mapę. Na lewym panelu można teraz skorzystać z funkcji "Miarka" - przesuwając po ekranie wskaźnik sprawdzamy jaka odległość dzieli nas od wybranego punktu.

W kontekście następnych punktów potrzebna będzie do opanowania jeszcze jedna umiejętność - przegrywanie własnych map i ścieżek do pamięci telefonu. Podczas instalacji Oruxmaps tworzy swój katalog o nazwie "/oruxmaps". Katalog ten najczęściej umieszczany jest na karcie SD, czasem jednak ląduje na partycji danych w telefonie. W katalogu tym tworzone są m.in. dwa podkatalogi: "/mapfiles", do którego przegrywamy offline'owe mapy, oraz "/tracklogs", w którym umieszczamy własne ślady GPX. Po dodaniu nowych map może zaistnieć konieczność zindeksowania ich przez program - w menu "Mapy" należy wybrać "Nowa Mapa", a następnie na górze symbol odświeżania.

Pliki do OruxMaps najłatwiej przegrać bezpośrednio z komputera, po połączeniu za pomocą interfejsu USB.

To nie jest proste, to nie jest szybkie, ale ponieważ jest bardzo potrzebne, więc do roboty. Do wykonania poniższych czynności będzie nam potrzebny zainstalowany interpreter języka Python, dwa programy graficzne - PhotoScape i GIMP oraz konwerter map OruxMaps Desktop. W naszym przypadku posłużymy się przykładową mapą Compass'u - "Okolice Zabierzowa", którą bezpłatnie można pobrać ze strony Wydawnictwa:

Mapa jest w formacie TrekBuddy. Krok po kroku - co musimy zrobić, żeby skonwertować ją do formatu OruxMaps SQLite:

1)

Z archiwum "TrekBuddy_Zabierzow.zip" wypakowujemy plik (kolejne archiwum) "Zabierzow_2010.tar".

2)

Z tego archiwum wypakowujemy folder "set" oraz plik "Zabierzow_2010.map". Folder zawiera tzw. kafelki, czyli małe pliki graficzne, reprezentujące poszczególne części mapy. Plik "*.map" obejmuje kalibrację mapy - jej obszar, użyty system współrzędnych, itp.

3)

Pliki z folderu "set" trzeba połączyć w jeden duży plik mapy. Tutaj zaczynają się schody - kafelki niestety nie są w takiej kolejności, jakiej życzyłby tego sobie program do ich łączenia. Ręczne posortowanie plików jest bardzo czasochłonne, dlatego napisałem mały program w Pythonie, który robi robotę:

Programik kopiujemy do folderu "set" i tam uruchamiamy. Dokonana zostanie konwersja nazw plików kafelków z formatu Y_X na X_Y.

Nazwy plików przed i po konwersji

Oczywiście musimy mieć zainstalowany na komputerze interpreter języka Python (spokojnie, nie jest to trudne). Można go ściągnąć ze strony:

4)

Wszystkie kafelki z przeformatowanymi nazwami należy połączyć w jedną mapę. Najlepszym programem do tego będzie PhotoScape:

Uruchamiamy go, następnie wybieramy moduł "Łączenie". W lewym górnym okienku wybieramy folder "set". Jego zawartość zostanie wyświetlona w lewym dolnym okienku. Zaznaczamy w nim wszystkie kafelki i przeciągamy do środkowego górnego okienka. Wybieramy teraz po prawej zakładkę "Checker" i zmieniamy opcje:

  • kolumny: 18 (wartość ta jest różna dla różnych map);
  • nieco poniżej z listy należy wybrać "Zachowaj oryginalny rozmiar";
  • na samym dole - "Wyrównaj poziomo": "Lewo";
  • pozycję niżej - "Wyrównaj pionowo": "Góra".
PhotoScape z gotową do zapisania mapą Zabierzowa

W prawym górnym rogu wybieramy "Zapisz". Koniecznie zmieniamy typ pliku na PNG. Plik zapisujemy pod nazwą "Zabierzow_2010.png" w folderze z punktu 2), obok pliku "Zabierzow_2010.map".

Prawidłowa zawartość folderu z plikami mapy
5)

Połączona przez nas mapa jest właściwie już gotowa, ale ma jeden mankament - na dole i po prawej ma czarne obramowanie. Można usunąć je praktycznie każdym programem graficznym z funkcją kadrowania (włącznie z PhotoScape). Najłatwiej zrobić to jednak GIMPem:

Wczytujemy w nim plik mapy poprzez "Plik/Otwórz", następnie z menu wybieramy "Obraz/Automatycznie przytnij obraz". Mapa w postaci rastrowej jest gotowa. Zapisujemy ją poprzez "Plik/Zastąp".

6)

Edytujemy teraz Notatnikiem plik "Zabierzow_2010.map". Zmian jest niewiele... w drugiej i trzeciej linii powinna znajdować się nazwa pliku z naszą mapą, czyli "Zabierzow_2010.png". W naszym przypadku edycji wymaga jedynie trzecia linia. Zapisujemy zmodyfikowany plik. Pliki "Zabierzow_2010.map" oraz "Zabierzow_2010.png" tworzą razem gotową mapę elektroniczną w formacie OziExplorer. Taką mapę można otworzyć w wielu programach do edycji danych GPS, np. OkMap czy wspomnianym OziExplorer.

7)

Nam potrzebna jest jeszcze jedna konwersja - z formatu OziExplorer na OruxMaps SQLite. Posłuży do tego program OruxMaps Desktop:

Uruchamiamy program, przechodzimy do karty "Converter", klikamy przycisk "Calibration file", wybieramy plik "Zabierzow_2010.map". Klikamy przycisk "Destiny Directory" i wskazujemy docelowy folder, w którym zapisana będzie stworzona przez nas mapa. Na dole okna zaznaczamy jeszcze "png format", a po prawej sprawdzamy, czy jest wybrane "Sqlite format". Klikamy "Create map". Czasami dostaniemy ostrzeżenie, jednak można je zignorować.

W prawym górnym rogu wybieramy "Zapisz". Koniecznie zmieniamy typ pliku na PNG. Plik zapisujemy pod nazwą "Zabierzow_2010.png" w folderze z punktu 2), obok pliku "Zabierzow_2010.map".

OruxMaps Desktop z mapą przygotowaną do konwersji na formal OruxMaps SQLite
8)

Stworzone przez nas dwa pliki, wraz z folderem, w którym się znajdują, przegrywamy do pamięci telefonu (procedura opisana w punkcie 2.).

Czasem trafia się sytuacja, że udajemy się w jakąś okolicę tylko raz, i nieopłacalne jest kupowanie mapy specjalnie na tą okazję. Może się także zdarzyć, że danego terenu nie obejmuje żadna komercyjna mapa. Tutaj z pomocą przychodzą bezpłatne mapy internetowe i MOBile Atlas Creator - MOBAC. Program ten umożliwia zrzucenie wybrane fragmentu mapy np. OpenStreetMap do pliku OruxMaps SQLite. Czynność ta nie jest specjalnie skomplikowana. MOBAC możemy pobrać ze strony:

Zaraz po uruchomieniu program zapyta o docelowy format mapy (albo atlasu, jeśli plik ma zawierać kilka map), jaki chcielibyśmy stworzyć. Wybieramy oczywiście "OruxMaps Sqlite", choć czasem przydaje się też format OziExplorer, PNG czy PDF. Okno główne aplikacji składa się z trzech części: po lewej stronie ustalamy wszystkie parametry tworzonego atlasu/mapy; na środku znajduje się wybrana przez nas mapa wraz z naniesioną siatką; po prawej stronie jest okienko, w którym możemy wczytać pomocniczy plik ze śladem trasy (gdybyśmy np. chcieli zrzucić tylko fragment mapy, przez który ta trasa przebiega). W menu "Panels" możemy wyłączyć tymczasowo prawe/lewe okienko.

Okno główne programu MOBAC z wczytanym śladem GPX

Pierwsze co musimy zrobić, to wybrać mapę, którą chcielibyśmy zrzucić do pliku. Służy do tego znajdująca się po lewej stronie lista "Map Source". W nowszych wersjach MOBAC została ona znacznie zredukowana (po skargach m.in. Google - ściąganie dużych fragmentów map potrafi znacząco obciążać serwery). Najlepiej wybrać którąś z map OpenStreetMap.

Po drugie musimy zaznaczyć interesujący nas obszar mapy. Możemy to zrobić wprowadzając ręcznie współrzędne w polu "Selection coordinates (min/max)" na górze po lewej. Wygodniej jednak zaznaczyć wycinek mapy przy pomocy myszki. Pomocne przy tym może być wyświetlenie siatki "Grid Zoom X" - do wyboru w górnej części środkowego okna. X to stopień powiększenia, czym jest on większy, tym siatka jest gęstsza. Im więcej zaznaczonych kafelków (kwadratów), tym mapa dłużej będzie się ściągać i więcej zajmować miejsca na dysku. Dodatkowo można obejrzeć mapę przy danym powiększeniu - przesuwając suwak "Zoom" na wybraną wartość.

Trzecią rzeczą, jaką musimy zrobić, to zaznaczyć po lewej w panelu "Zoom Levels" skalę mapy, jaką chcielibyśmy stworzyć. Można wybrać kilka, wtedy zostanie stworzony atlas z mapami w różnych skalach. Praktycznie rzecz biorąc - jeśli wybierzemy jedną skalę - wtedy nasza mapa w OruxMaps będzie powiększana/pomniejszana cyfrowo dla wszystkich innych skal. Jeśli wybierzemy kilka - OruxMaps przy powiększaniu/pomniejszaniu wczyta automatycznie mapę w innej skali, bez straty jakości. Każda mapę można zapisać w różnych skalach, trzeba się jednak liczyć z tym, że tak stworzony atlas może być naprawdę sporych rozmiarów. Zaznaczyć też trzeba, że OruxMaps nie ma problemu z obsługą dużych atlasów nawet na słabych telefonach, po prostu dynamicznie wczytuje potrzebne mu kafelki mapy, znajdujące się w mikro-bazie SQLite. Ograniczeniem może być jedynie wielkość dostępnej pamięci telefonu - czy to na karcie SD, czy na wewnętrznej partycji. Osobiście, w zależności od zastosowania, tworzę mapy w skali 13-17.

Czwartym i ostatnim krokiem jest dodanie naszego obszaru mapy, z uwzględnieniem różnych skal, do tworzonego atlasu. Robimy to w zakładce "Atlas Content" po lewej. Na dole zakładki wpisujemy nazwę w polu "Name" (najczęściej używam tutaj nazwy mapy, z jakiej korzystam, np. OSM_MTB). Klikamy "Add selection".

Powyższe cztery kroki możemy powtarzać wielokrotnie dla różnych map - w jednym atlasie mogą być mapy wybranego przez nas obszaru zarówno z OpenStreetMap, UMP-pcPL, czy Google.

Jeśli wybraliśmy już wszystko, pozostaje jedynie kliknąć "Create Atlas" w lewym dolnym rogu programu. Teraz spokojnie czekamy, a wygenerowane pliki przegrywamy do folderu aplikacji na karcie SD lub partycji wewnętrznej telefonu.

Często zachodzi konieczność przygotowania wcześniej śladu trasy, po której chcielibyśmy się poruszać np. na wycieczce. Z pomocą przychodzi nam tutaj RouteConverter. Program ściągamy ze strony:

Po wybraniu "Stable Releases" będziemy mogli ściągnąć wersję odpowiednią dla naszego systemu operacyjnego. Możemy też wybrać "Prerelease" i jedną z pozycji w "Offline Edition" - ta wersja ma mniejszą liczbę map, ale na słabszym sprzęcie chodzi dużo sprawniej.

Po uruchomieniu programu, w lewym górnym rogu, wybieramy mapę, która nas interesuje. Teraz rysujemy na niej poszczególne punkty trasy, jaką chcielibyśmy się poruszać. Robimy to trzymając wciśnięty przycisk "CTRL" i klikając lewym przyciskiem myszy na mapie. Następnie musimy zmienić rodzaj śladu - na górze po prawej w polu "Rodzaj" wybieramy "Ścieżka". Voila. Teraz możemy zapisać naszą ścieżkę - "Plik/Zapisz jako..." oraz wybrać odpowiednią nazwę pliku. Zalecam format "GPS Exchange Format 1.1 (*.gpx)".

Przykładowa trasa stworzona w RouteConverter

I jeszcze mała uwaga - jeśli profil wysokościowy na dole ekranu ma dziwny kształt, należy zaznaczyć wszystkie pozycje trasy w tabelce po prawej, kliknąć na nich prawym przyciskiem myszy i wybrać "Uzupełnij/Wysokość". Wysokość każdego punktu zostanie skorygowana zgodnie z zewnętrznym serwisem danych wysokościowych. Zalecam tutaj "NASA SRTM 3". Można go wybrać w menu "Dodatki/Ustawienia/Ścieżki & Usługi/Serwis danych wysokości".

Poza tym nic nie stoi na przeszkodzie, żeby w RouteConverter modyfikować zewnętrzny plik GPX, np. zarejestrowany w OruxMaps, Endomondo lub Stravie.

Jest to jedna z najczęściej wykorzystywanych przeze mnie funkcji OruxMaps. Nie jest to oczywiście funkcjonalność na poziomie AutoMapy, ale w turystyce nie o to przecież chodzi. Wystarczy nałożony ślad na mapę by poruszanie w terenie stało się prostsze.

Mapa centrum Zawiercia z nałożonym przykładowym śladem

Jak załadować odpowiednią mapę opisałem w punkcie 2. Następnym krokiem jest wczytanie wcześniej przygotowanego śladu trasy. Na górze w menu wchodzimy do "Ścieżki/Załaduj plik KML/GPX", a następnie wybieramy to, co chcemy. Teraz można uruchomić GPS. Nasz ślad będzie wyróżniony kolorem, jego kształt wskazywać będzie kierunek ruchu. Można wczytać kilka śladów na raz. Gdy już nie będą one nam potrzebne, należy wybrać z górnego menu "Ścieżki/Usuń".

Bardzo często używam opcji "zejścia z trasy". Znajduje ona zastosowanie m.in. na wyścigach rowerowych - jeśli przez pomyłkę oddalę się o określoną odległość od trasy, telefon zaraz mi to zasygnalizuje wcześniej wybranym dźwiękiem.

Nałożenie śladu na mapę elektroniczną nie jest trudne. Jeśli wystarczy nam mapka w niskiej rozdzielczości - możemy zadowolić się odpowiednio skadrowanym zrzutem ekranu jednej z internetowych map z nałożonym na nią śladem. Otrzymana w ten sposób mapa jest mało dokładna i w większości przypadków do jej poprawnej interpretacji trzeba wykazać się znajomością pokrywanego przez nią terenu.

W tym punkcie zajmiemy się przygotowaniem mapy (stworzonej według przepisu z punktu 3. lub 4., format OziExplorer) z nałożonym śladem trasy (z punktu 5., format GPX). Posłuży nam do tego program OkMap w wersji 10.12.2. Nowsze wersje zostały skomercjalizowane. OkMap ma naprawdę ogromne możliwości. Jego wadą jest, delikatnie rzecz ujmując, słaby interfejs użytkownika.

Dla przykładu posłużymy się wcześniej przygotowanym śladem i mapą jednej z wycieczek, które odbyły się w 2015 roku:

Archiwum z mapą należy rozpakować. Wewnątrz znajduje się stworzona przez MOBAC mapa OpenStreetMap/4UMaps w formacie OziExplorer.

Po uruchomieniu programu od razu wchodzimy do "File/Load/Map". Na dole zmieniamy "Pliki typu" na "OziExplorer (*.map)". Wskazujemy odpowiedni plik znajdujący się w świeżo wypakowanym folderze. Teraz wczytujemy ślad - "File/Load/Waypoints, routes, tracks (multi)", zmieniamy na dole "Pliki typu" na "GPS eXchange (*.gpx)" i wskazujemy na pobrany plik śladu wycieczki.

Co teraz? Jeszcze dwie rzeczy. Pierwsza to upiększenie śladu w zależności od upodobania. Klikamy lewym przyciskiem myszy na śladzie, podświetlone zostaną wszystkie jego punkty. Klikamy teraz prawym przyciskiem na dowolny punkt, wybieramy "Single object/Modify/track: nazwa śladu". Zmieniamy kolor, grubość, etc.

OkMap - mapa po nałożeniu śladu

Pozostaje eksport mapy z nałożonym śladem do pliku graficznego. Na górze w menu wybieramy "Zoom/100%", a następnie "File/Save/Map image at zoom level". Wprowadzamy nazwę, najlepiej z rozszerzeniem "*.png". PNG jest formatem bezstratnym, jeśli mamy zamiar wydrukować taką mapę - będzie to najlepszy wybór. W innym przypadku wystarczy format JPG. Klikamy "Zapisz". Gotowe. W następnym punkcie opiszę bardziej zaawansowany sposób nakładania śladu na mapę rastrową - przy wykorzystaniu komercyjnych produktów firmy Adobe.

W punkcie tym opiszę dającą najlepszy efekt wizualny metodę nakładania śladu na mapę. Wykorzystam tutaj produkty Adobe. Potrzebna będzie podstawowa znajomość obsługi Adobe Photoshop i Adobe Illustrator. Dlaczego aż dwóch programów? Ano dlatego, że mapy są w formatach rastrowych, obsługiwanych przez Adobe Photoshop. Pliki GPX daje się natomiast przekształcić bezpośrednio tylko do plików wektorowych, obsługiwanych m.in. przez Adobe Illustrator.

Po pierwsze musimy skonwertować plik GPX do formatu SVG. Posłużymy się przy tym stroną:

Wyświetli się podstrona, na której zmieniamy w polu "Background map" wartość na "None". Przy "File #1" klikamy "Przeglądaj..." i wybieramy swój plik śladu. Klikamy przycisk "Draw the map". Powinien on zostać wyświetlony w formacie wektorowym. Na górze strony klikamy "download" i zapisujemy na dysku. Właśnie stworzyliśmy plik, który łatwo wczytamy każdym programem do obsługi grafiki wektorowej.

Nasz plik SVG otwieramy w Adobe Illustrator. Usuwamy zbędne elementy (skala, podpisy), ma zostać sama linia śladu. Klikamy na nią, następnie na górze wybieramy "Obrys" i wchodzimy do "Panelu obrysu". Tutaj możemy zmienić grubość linii. Zalecam też zmianę "Zakończenie" i "Narożne" na "Zaokrąglone". Zaznaczony ślad kopiujemy.

Uruchamiamy Adobe Photoshop i wczytujemy graficzny plik z mapą. Wklejamy jako "Obiekt inteligentny" to, co skopiowaliśmy przed chwilą. Następnie trzeba dopasować skalę śladu do mapki. Proponuję rozciągać go z wciśniętym klawiszem SHIFT tak, żeby proporcje X/Y zostały zachowane. Akceptujemy nowy obiekt na górnym panelu - zostanie on umieszczony na nowej warstwie. Teraz możemy zmienić styl warstwy, dodając fazę, obrys czy cień. Efekt może być taki, jak na poniższym obrazku.

Wycinek pliku PNG z nałożonym śladem GPX

Dodatkowo można uzupełnić mapkę ze śladem o legendę czy pomocnicze oznaczenia. Wszystko to zależy wyłącznie od naszej kreatywności.

Do stworzenia profilu wysokościowego użyjemy, podobnie jak w poprzednim punkcie, strony GPS Visualizer:

Jako przykład użyjemy pliku GPX z punktu 7.:

W prawej części okna klikamy znajdujący się obok "File #1" przycisk "Przeglądaj..." i wybieramy ściągnięty plik GPX. Teraz zmieniamy wyróżnione na czerwono opcje - jak na rysunku poniżej. Na końcu po prawej klikamy na przycisk "Draw the profile".

Konfiguracja opcji tworzonego profilu wysokościowego w GPS Visualizer

Znaczenie najczęściej wykorzystywanych opcji:

  • "OUTPUT FORMAT" - format pliku wyjściowego - stratny JPG, bezstratny PNG (zalecam, w tym przypadku plik wynikowy powinien być i tak mniejszy, niż JPG), wektorowy SVG;
  • "Profile width". "Profile height" - wysokość i szerokość w pikselach tworzonego profilu wysokości;
  • "X min.", "X max." - wartość minimalna i maksymalna na osi X - jeśli nasz ślad ma np. 34,23km powinniśmy te opcje ustawić na "0" i "35";
  • "X divisions" - ilość znaczników wartości na osi X;
  • "Y min.", "Y max.", "Y divisions" - analogicznie jak wyżej, ale dla osi Y;
  • "Line width" - grubość linii na wykresie;
  • "Spectrum direction", "Hue 1", "Hue 2" - opcje dotyczące sposobu kolorowania wykresu;
  • "Legend placement" - ustalenie położenia legendy na wykresie.
Stworzony profil wysokościowy w GPS Visualizer

Często spotykam sytuację, gdy po maratonie grupa uczestników dyskutuje na temat tego jaka była suma przewyższeń na trasie. Różnice bywają znaczne. Różne urządzenia, różne programy do rejestracji sygnału, bardzo różne wyniki. No i dlaczego jeżdżąc po płaskim jak stół lodowisku Endomondo potrafi pokazać, że pokonaliśmy dziesiątki, jeśli nie setki metrów przewyższenia?

Dokładność odbiorników sygnału GPS, z jakich korzystamy na co dzień, nie jest duża. W sprzęcie z tzw. "segmentu użytkownika" powinna dla 80% pomiarów mieścić się w zakresie 1-3m. Dochodzi do tego jeszcze błąd wnoszony przez całe urządzenie. Programy do rejestracji śladu trasy, jak Endomondo czy Strava, próbkują sygnał GPS z różnymi częstotliwościami - u mnie pierwszy program co 6-7 sekund, drugi co 1-2 sekundy. Jeśli błąd dla kolejnych pomiarów wysokości wyniesie powiedzmy -3m i +3m to nawet na płaskim odcinku możemy mieć kilka metrów przewyższenia.

Częstotliwość próbkowania Endomndo (lewy rysunek) i Stravy (prawy rysunek) na tym samym odcinku trasy

Każdy program do rejestracji śladu ma własny algorytm pomijający próbki o zbyt dużym błędzie. Od inteligencji tego algorytmu zależy dokładność obliczonej całkowitej sumy przewyższeń na trasie. Porównując wartości w Endomondo i Stravie otrzymamy dwa różne wyniki. Niektóre programy oferują dodatkową korekcję zgodnie z zewnętrznymi danymi wysokościowymi (np. NASA SRTM 3). To zwykle bardzo poprawia wynik obliczeń, ale bywają sytuację, w których ta metoda zawodzi. Poniżej zrzut ekranu jednego z moich treningów biegowych po koronie stadionu. Różnica wysokości między koroną, a płytą to jakieś 15 metrów. Jak widać niektóre próbki wypadają na płycie - jeśli potem skorygujemy ich wysokość i obliczymy całkowitą sumę przewyższeń, to otrzymamy znacznie zawyżony wynik. Dlatego prawidłowość korekcji wysokości zależy od poprawności pozycji X-Y. Niestety tutaj następne "ale" - bazy danych korygujących powstały na podstawie danych dostarczonych przez satelity. Już sam ten pomiar jest obarczony pewnym błędem wysokości. Po drugie, a zarazem znacznie ważniejsze, pomiary te dokonywane były na siatce co 90m. Dane pomiędzy próbkami były interpolowane. Jakie to może powodować problemy? Hmm, no cóż, dane z NASA SRTM 3 nie widzą różnicy wysokości między płytą boiska, a koroną...

Przykład rejestracji punktów śladu GPS jednego z treningów biegowych

Czy wyższa częstotliwość próbkowania jest lepsza? Moim zdaniem to zależy od dokładności urządzenia i tego, co chcemy zarejestrować. Kolarz jadący z prędkością 40km/h pokonuje ponad 11 metrów drogi w każdej sekundzie ruchu. Próbkując pozycję co 6 sekund, różnica odległości między pomiarami będzie wynosić około 66m. Jest to wartość do zaakceptowania zwłaszcza, że prędkość taką osiąga się zwykle na prostych i nie jest wtedy potrzebne tak częste próbkowanie. Z drugiej strony mogę podać przykład przeciwny - jazda na łyżwach na małym lodowisku. Jeśli interwał między kolejnymi pomiarami jest tutaj zbyt duży, to ślad będzie bardzo niedokładny. W kilka sekund na lodowisku można przebyć dużą odległość, a wyniku nie da się interpolować, bo tor ruchu często jest przypadkowy. Jeśli nasz odbiornik ma zbyt małą dokładność, to nawet częste próbkowanie nic tu nie da - czegoś takiego nie poprawi już żaden algorytm. Poza tym wielkość pliku z zarejestrowanym śladem jest proporcjonalna do częstotliwości próbkowania - dlatego pliki GPX ze Stravy są tak duże w porównaniu do Endomondo.

Przykładowy ślad zapisany podczas jazdy na łyżwach

Jaka jest suma przewyższeń powyższego śladu? Gdyby zliczyć to, co zarejestrowało Endomondo za pomocą wbudowanego odbiornika GPS, to wyszłoby ponad 700 metrów. Po korekcji wartość ta maleje do 150m. Oczywiście poprawną wartością powinno być zero. Skąd więc aż 150m? Z surowych danych wziętych z pliku GPX po korekcji wynika, że występują pewne mikroróżnice wysokości między poszczególnymi próbkami. Nie są one większe niż 1m, jednak przy ponad 600 zarejestowanych punktach nawet najmniejsze odchylenie od poprawnego wyniku daje w sumie znaczne przewyższenie.

Inną sprawą jest suma przewyższeń na śladzie przygotowanym w popularnych serwisach internetowych - Google czy GPSies. Ślady przygotowane za pomocą tych stron optymalizowane są pod względem prawidłowego ich wyglądu w płaszczyźnie X-Y, wysokość Z jest pomijana. Jeśli odległość między dwoma sąsiednimi punktami śladu jest duża, a występuje tam np. jakaś górka, to po prostu zostanie ona niezauważona. Liczone są tylko różnice wysokości między sąsiednimi punktami. Poniżej ślad jednego z wyścigów szosowych, w jakich brałem ostatnio udział. Czy suma przewyższeń obliczona na jego podstawie będzie poprawna? Być może, ale na pewno odległości między niektórymi punktami śladu są za duże.

Ślad Bike Atelier Road Psary

Jak więc ja obliczam sumę przewyższeń? Bezpośrednio z programu RouteConverter. W tym celu wczytuje do niego ślad GPX, jeśli sąsiednie punkty trasy są zbyt daleko od siebie - dokładam dodatkowe co 100-200 metrów. Dalej wykonuje korekcję zgodnie z danymi NASA SRTM 3 dla wszystkich punktów. Suma zostanie wyświetlona w polu "Sumaryczne wznoszenie". Bez względu jednak na to jaką metodę wybierzemy, i tak będzie ona obarczona pewnym błędem.

Naszym urządzeniom zdarza się zgubić sygnał GPS podczas rejestracji. Na mapie Endomondo otrzymujemy wtedy brzydką linię prostą, łączącą punkty przed i po utracie sygnału. Nie jest to wina programu do rejestracji, ale samego odbiornika GPS w urządzeniu. Niestety czasem potrzebujemy pełnego, dokładnego śladu...

Jeśli chodzi wyłącznie o jego naprawę w wymiarze X-Y-Z (wsp. pozioma, pionowa i wysokość) - jest to stosunkowo proste, wystarczy skorzystać z metody opisanej w punkcie 5. RouteConverter świetnie się do tego nadaje. Ślad taki łatwo można później nanieść na mapę rastrową.

Czy tak naprawiony ślad da się z powrotem wczytać do Endomondo? Da się... teoretycznie. Zregenerowana część trasy jest poprawna w trzech wymiarach, ale w Endomondo potrzebny jest czwarty - czas - dla każdego dopisanego w RouteConverter punktu. Także i to da się zrobić, ale zaznaczam od razu - jest tutaj dużo "kombinowania". Używam tej metody tylko, jeśli muszę. Wolę mieć włączony tryb samolotowy w telefonie, przy nim nie mam problemów z gubieniem sygnału i żadne poprawiania śladu później nie są potrzebne.

Kolejność postępowania z uszkodzonym plikiem powinna być taka:

  • w wyeksportowanym z Endomondo pliku GPX trzeba znaleźć miejsce, w którym brakuje śladu;
  • w RouteConverter trzeba narysować brakujący fragment;
  • we fragmencie tym trzeba zmienić wartość czasu dla każdego punktu - za pomocą narzędzia GPS Babel;
  • fragment ten należy wstawić do uszkodzonego pliku GPX;
  • tak przygotowany ślad można zaimportować do Endomondo.

Na początku trochę teorii na temat struktury pliku GPX zawierającego ścieżkę (tak właśnie jest w plikach z Endomondo). Wewnątrz jest on normalnym plikiem tekstowym w formacie XML. Można go edytować dowolnym edytorem, np. Notatnikiem. Ja polecam Notepad++.

Ogólna struktura pliku GPX z Endomondo

Strukturę pliku GPX przedstawia powyższy rysunek. Każdy taki plik zawiera dokładnie jeden element główny "gpx" (między znacznikami początku i końca: <gpx> i </gpx>). Wewnątrz niego może znajdować się element "metadata" (zawierający opis śladu) oraz musi znajdować się jeden lub więcej elementów ścieżki "trk". Te z kolei zawierają elementy segmentów ścieżki "trkseg" (może być jeden lub więcej, jeżeli użyjemy w Endomondo przycisku pauzy lub funkcji autopauzy). Każdy segment składa się z elementów "trkpt", czyli danych przesłanych z odbiornika GPS. Elementy te w znaczniku początku muszą zawierać atrybuty "lat" - szerokość geograficzna i "lon" - długość geograficzna. Wewnątrz tego elementu mogą znajdować się ponadto inne elementy, np.: "ele" - wysokość, "time" - czas, "name" - nazwa.

Przeglądając plik GPX dość łatwo można zlokalizować uszkodzenie. Normalnie dane z odbiornika GPS rejestrowane są co kilka sekund. Jeśli w elemencie "time" widać, że przerwa między dwoma kolejnymi pomiarami jest większa, to zapewne w tym miejscu wystąpił jakiś problem. Przykładowy uszkodzony plik:

Uszkodzony ślad (kolor niebieski) oraz brakujący fragment (na czerwono)

Analizując ten plik w edytorze tekstowym wyraźnie widać różnicę czasową między pomiarami - linie 248 i 252:

Miejsce uszkodzenia ścieżki w pliku GPX

A co jeśli nasz plik GPX ma kilkadziesiąt tysięcy linii? Znalezienie miejsca uszkodzenia w takim pliku jest bardzo czasochłonne, ale można spróbować innej metody. Wczytujemy taki plik w RouteConverter, zaznaczamy wszystkie pozycje na liście po prawej, klikamy na zaznaczeniu prawym przyciskiem myszy i wybieramy "Uzupełnij./Numer". Każdemu punktowi naszej ścieżki zostanie nadana nazwa w postaci kolejnego numeru. Plik teraz zapisujemy. Po prawej zmieniamy "Rodzaj" na ":Lista punktów drogi". Znajdujemy na mapce po lewej ostatni punkt przed uszkodzeniem. W polu "Opis" znajduje się nazwa punktu, który musimy znaleźć w pliku GPX.

Jeśli znaleźliśmy uszkodzenie - zapisujemy sobie wartość elementu "time" sprzed i po. Niedługo będą potrzebne:

2016-06-12T15:39:06Z
2016-06-12T15:49:52Z

Dorysowujemy w RouterConverter brakujący odcinek zachowując mniej więcej stałe odległości między punktami (ważne!), zmieniamy jego "Rodzaj" na "Ścieżka" oraz zapisujemy go w nowym pliku GPX, np. "naprawa.gpx".

Dorysowany odcinek w RouteConverter

Teraz musimy zmienić wartość czasu dla każdego dorysowanego punktu. Można to zrobić ręcznie w RouteConverter (bardzo żmudne) lub za pomocą narzędzia GPSBabel, które można pobrać ze strony:

gpsbabel -i gpx -f plik_źródłowy.gpx -x track,faketime=fczas_początku+interwał -o gpx -F plik_wynikowy.gpx

Parametr "czas_początku" musi być w formacie RRRRMMDDGGMMSS. Wcześniej zapisaliśmy dwie wartości elementu "time". "Czas początku" powinien być nieznacznie większy (5-10 sekund) od pierwszego z nich. Parametr "interwał" jest to wartość czasowa, wyrażona w sekundach, jaką GPSBabel będzie dodawał nadając wartości czasu kolejnym punktom. Interwał ten można zgrubnie obliczyć - wartość "time" sprzed i po dzieli 646 sekund. Nasza ścieżka naprawcza ma 36 punktów. W tym przypadku interwał będzie wynosić 17 sekund (646/36=17.9, zaokrąglamy w dół do 17). Dla naszego przykładu komenda zmiany czasu wyglądać powinna następująco:

gpsbabel -i gpx -f naprawa.gpx -x track,faketime=f20160612153912+17 -o gpx -F naprawa_2.gpx

Ostatnia rzecz. Wszystkie elementy "trkpt" z pliku "naprawa_2.gpx" musimy skopiować do pliku "uszkodzone.gpx" w miejscu wystąpienia problemu - na rysunku poniżej zaznaczone jest ono czerwoną linią.

Miejsce, w które kopiujemy dorysowany fragment

Dla naprawionej ścieżki warto jeszcze zrobić korekcję wysokości w RouteConverter - było to opisane w jednym z wcześniejszych punktów. Naprawiony plik można z powrotem zaimportować na Endomondo:

Wygląd poprawionego pliku w Endomondo

Jakiś czas temu postanowiłem stworzyć mapę hipsometryczną Wyżyny Krakowsko-Częstochowskiej. Do jej przygotowania użyłem powszechnie dostępnych danych DEM misji NASA SRTM. Dane te były łączone specjalnie napisanym programem z mniejszych kafelków, a następnie obrabiane w programie Surfer. Jeśli komuś potrzebna jest mapa w większej rozdzielczości - proszę pisać na maila.

Mapa hipsometryczna Wyżyny Krakowsko-Częstochowskiej
Mapa hipsometryczna Wyżyny Krakowsko-Częstochowskiej z podziałem na powiaty
Mapa hipsometryczna Wyżyny Krakowsko-Częstochowskiej i okolic przylegających

W przypadku pytań piszcie na adres: