× STRONA GŁÓWNA TEAM| WYDARZENIA| KALENDARZ| WYNIKI| GALERIA| GPS| STOWARZYSZENIE O NAS
GPS

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
  13. Mapy WIG dla OruxMaps
  14. Lokalna kopia danych Stravy
  15. Szukanie punktu w plikach GPX
  16. Strava Heatmap dla Jury

Mapy w formacie elektronicznym można pozyskać na dwa sposob - 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ą możemy 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 nn 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 i Stravy 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

Często jeżdżąc na rowerze po Jurze używam nawigacji OruxMaps w połączeniu z mapami Compass'u. Ostatnio po wycieczce zatrzymałem się z kolegami w Przystanku w Zawierciu, gdzie jedną ze ścian przyozdabia stara mapa WIGu. Pomyślałem - dlaczego by nie skalibrować map WIG pod OruxMaps?

Czynność ta nie jest trudna, natomiast jest pracochłonna (nie wybrałem najprostszej metody - każdy arkusz przed kalibracją obrobiłem i zoptymalizowałem). Obszar, który mnie interesował, to 20 arkuszy z terenów Jury. Kalibrację przeprowadziłem w OziExplorer metodą 4-punktową, dokładność potwierdziłem zarejestrowanymi wcześniej śladami GPX z obszaru danego arkusza. Format OziExplorer skonwertowałem następnie do OruxMaps (dla Androida) oraz MapTiler (dla iPhone).

Arkusze WIG poddane kalibracji

Oczywiście czasem to, co widzimy na mapie, odbiega znacznie od tego, co mamy w rzeczywistości. Mapy WIG do najdokładniejszych nie należą. Jednak stanowią wspaniałą pamiątkę z przeszłości i nawet jeśli nie są tak dokładne, jak obecne mapy - mogą zawierać cenne informacje. Linki:

Wygląd mapy WIG pod OruxMaps

Strava jest prawdopodobnie najpopularniejszym rejestratorem treningów, przynajmniej w świecie kolarskim. Jedną z mniej znanych jej funkcji jest możliwość pobrania kopii swoich danych z serwerów aplikacji. Po co coś takiego robić? Powody mogą być różne - na razie podstawowe funkcje Stravy są bezpłatne, może jednak nadejść dzień, w którym stracimy darmowy dostęp do swoich treningów. W końcu są to aplikacje oparte na modelu Freemium. Mając kopię swoich treningów na komputerze możemy przeglądać je w innych aplikacjach, np. RouteConverter. Jeszcze inną możliwość wykorzystania tych danych przedstawię w następnym punkcie.

Co zawiera kopia danych? Oczywiście oryginalne pliki wszystkich naszych treningów. Poza tym zdjęcia - wszystkie, nie tylko ostatnie 100, jak to jest wyświetlane w aplikacji. W poszczególnych plikach możemy znaleźć listę naszych znajomych, kiedy ich zaakceptowaliśmy, nasze kudosy, komentarze, i wiele więcej. I to wszystko w dość przejrzystej formie - plików CSV, które łatwo można zaimportować np. do Excela, albo podejrzeć w zwykłym edytorze plików tekstowych.

Co zrobić żeby otrzymać kopię naszych danych? Oto potrzebne kroki:

  • logujemy się na komputerze na stronę Stravy;
  • w prawym górnym rogu wskazujemy na zdjęcie naszego profilu - z menu wybieramy "Settings";
  • z menu po lewej stronie wybieramy „My Account”;
  • na dole strony, w części "Download or Delete Your Account" naciskamy przycisk "Get Started";
  • teraz w części "Download Request (optional)" wybieramy "Request Your Archive";
  • strava w ciągu kilku minut/godzin (w zależności od ilości zgromadzonych przez nas danych) powinna przygotować dla nas archiwum, link do niego otrzymamy na adres e-mail skojarzony z kontem Stravy.

Aktualnie kopię danych możemy otrzymać nie częściej, niż raz w tygodniu.

Jedną z możliwości, jakie daje nam posiadanie swoich plików z treningami na lokalnym komputerze, jest możliwość ich przetwarzania w sposób masowy. Możliwość tą wykorzystałem w małym skrypcie. Mianowicie czasem chciałbym wiedzieć na którym treningu jechałem przez dany punkt.

Skrypt ten potrzebuje podania przez użytkownika kilku parametrów - będzie wymagana oczywiście ścieżka do katalogu z plikami naszych treningów. Pliki treningów możemy uzyskać pobierając kopię danych ze Stravy - będą one w katalogu "activities". Oprócz tego skrypt potrzebuje współrzędnych szukanego punktu (w formacie 0.00000, 0.00000 – współrzędne punktu można odczytać np. w Google Maps). Ostatni parametr to promień okręgu, wewnątrz którego skrypt będzie szukał punktów - jest podawany w metrach, zalecam wartość w przedziale 50-250. Wszystko powyżej można zapisać jako: "szukaj wszystkich plików, w których ślad trasy przebiega w pobliżu podanego punktu, ale nie dalej, niż np. o 100m".

Teraz kilka uwag technicznych.

Po pierwsze - skrypt działa jedynie na plikach GPX, czyli takich, w jakich aplikacje Stravy dla Androida i iPhone’a domyślnie zapisują aktywności na serwerach. Jeśli dane do Stravy importowaliśmy z innych systemów zapisu treningu (Garmin, itp.) - pliki mogą być zapisane w innym formacie, tudzież spakowane. Będzie więc konieczne rozpakowanie tych plików i/lub skonwertowanie ich do formatu GPX. O rozpakowywaniu nie ma się co rozpisywać - robimy to tak, jak przypadku każdego archiwum. Do konwersji rozwiązaniem z wyboru jest wykorzystanie programu GPSBabel, który obsługuje (prawie) wszystkie formaty zapisu danych GPS. Najprostsza składnia takiej konwersji z linii komend Windows (przykład konwersji plików *.fit do *.gpx w bieżącym folderze):

FOR %%i IN (*.fit) DO gpsbabel.exe -t -i garmin_fit -f %%i -o gpx -F %%~Ni.gpx

Po drugie - skrypt posiada pewne uproszczenia - w tym przypadku "szybkość kosztem dokładności". Tak więc Ziemia w pobliżu szukanego punktu nie jest elipsoidą, tylko powierzchnią płaską (błąd pomijalny). Jeden stopień długości i szerokości geograficznej wynosi 110km. O ile w przypadku szerokości geograficznej błąd również jest pomijalny, o tyle w przypadku długości geograficznej błąd wzrasta znacznie przy oddalaniu się od równika. Jednak w skrypcie tym de facto nie chodzi o dokładność (bo duży błąd wprowadza już sam pomiar GPS urządzeniami consumer-level). Nie powinno więc być problemem, że zamiast szukania punktów w okręgu o promieniu 50m będziemy szukać punktów w elipsie o promieniu między 50m a powiedzmy 70m (pomijam, że elipsa nie ma promienia, tylko dwie półosie).

Po trzecie - skrypt posiada pewne funkcje zaawansowane (utrudniające nieco czytanie kodu, ale bardzo usprawniające działanie), a mianowicie używa bibliotek "mmap" i "multiprocessing". Pierwsza powoduje zamiast blokowego odczytu danych z dysku, czyli w naszym przypadki plików GPX, załadowanie ich od razu w całości do pamięci. Druga umożliwia wykonywanie przetwarzania plików w procesach równoległych - na maksymalnej dla danego procesora ilości wątków. Zadanie to bowiem dość łatwo jest "zrównoleglić". Czas działania skryptu na moim komputerze - ~1400 plików GPX, w sumie ~700MB danych, zwykły dysk SSD, procesor i7-3770 - niecałe 12 sekund. Dodać jeszcze muszę, że skrypt używa dość topornego algorytmu przetwarzania plików - dane w plikach traktuje jako zwykłe ciągi tekstowe. Dane w plikach GPX mają jednak strukturę XML, możnaby więc do ich przetwarzania wykorzystać np. bibliotekę "xml.etree.ElementTree". Jednak w tym przypadku pierwsze rozwiązanie jest znacznie szybsze. Powiedziałbym nawet, że najszybsza, a zarazem bardzo prosta, byłaby implementacja tego fragmentu kodu w asemblerze.

Poniżej cały kod skryptu:

Jedną z ciekawszych funkcji Stravy jest tzw. "Strava Heatmap", czyli możliwość obejrzenia specjalnie przygotowanej mapy, na której zaznaczone są trasy treningów innych osób. Jej wyjątkowość polega na tym, że widać na niej którymi ścieżkami chętnie poruszają się inni użytkownicy - im ścieżka jest częściej wykorzystywana, tym na mapie jej kolor jest bardziej intensywny.

Ostatnio byłem na wycieczce w części Jury, do której rzadko się zapuszczam i słabo ją znam. Musiałem się poruszać głównymi drogami/asfaltami. Próba wjazdu w las niestety skończyła się tym, że musiałem się wycofać - wszystkie drogi kończyły się ślepo. W tym miejscu bardzo przydałaby mi się możliwość nawigacji po Strava Heatmap - wiedziałbym, czy daną ścieżką jeżdżą inni rowerzyści. Niestety Strava nie umożliwia takiej funkcji. Jednak bardzo by się przydała. Strava nie udostępnia też danych mapy Heatmap na zewnątrz, a przynajmniej nie udostępnia ich w czytelnej rozdzielczości. Tak więc żeby przygotować mapę Heatmap pod OruxMaps trzeba było mocno pokombinować...

Mapa została przygotowana przy zaznaczonej opcji wyłącznie dla treningów rowerowych (treningi piesze biegną czasem drogami, z którymi rower może mieć problem). Poza tym zrezygnowałem z konturów budynków w tle - te nadmiarowe dane dają w rezultacie znacznie większe pliki PNG, a więc zajmują więcej pamięci w telefonie. Mapa została przygotowana zgodnie z aktualnymi danymi - na dzień 29.05.2020. Obejmuje cały teren Jury - od Częstochowy do Krakowa, a także tereny przyległe - tak, żeby zachować prostokątny jej układ. Podzieliłem ją na 4 części, komputer z 8GB pamięci nie dałby rady obrobić mapy w jednym kawałku. Mapę przygotowałem w trzech stylach - z ciemnym i jasnym tłem, oraz mapę w stylu WIG.

Trzy style mapy Heatmap - ciemny, jasny i WIG