MATLAB, MAPY i GPS DLA KAŻDEGO

Trzeci i ostatni wpis na temat map w MATLABie. Wracam w nim do tematu analizy danych zapisanych za pomocą urządzenia GPS (np. telefonu czy zegarka biegowego). Tym razem dowiecie się jak wczytać dowolną mapę z Internetu, wyświetlić i przeanalizować przebieg trasy oraz obliczyć przebyty dystans zarejestrowanej aktywności.

W poprzednim wpisie skupiłem się na rysunkach bąbelkowych na tle mapy. Tym razem wracam do tematu treningów/aktywności zapisanych w formacie GPX za pomocą smartfonu czy zegarka biegowego i systemu GPS. Więcej na temat tej formy zapisu współrzędnych geograficznych znajdziecie w poprzednim wpisie TUTAJ.

Do wizualizacji na mapach położenia opisanego za pomocą współrzędnych geograficznych służy funkcja geoplot. Użyjemy jej do narysowania przebiegu treningu biegowego, zapisanego w formacie GPX. Plik możecie pobrać TU.

clear all; close all; clc

% Wczytanie trasy
trasa = gpxread('dane_trening_petla.gpx', 'FeatureType', 'track');

% Rysunek
figure;
geoplot(trasa.Latitude, trasa.Longitude, 'LineWidth', 5);

Domyślnie trasa jest rysowana na tle mapy ‘darkwater’, która jest dostępna w MATLABie. Nie zawiera ona jednak szczegółów dotyczących topologii terenu. Rozwiązaniem byłoby wyświetlić trasę na tle mapy Google, jednak za dostęp do swoich map firma z Mountain View liczy sobie kilkaset dolarów. Skorzystamy więc z map darmowych dostępnych w ramach projektu OpenStreetMap i wczytamy je do MATLABa. Na stronie projektu jest dostępnych wiele map o różnym charakterze, których lista jest dostępna TUTAJ. Możecie poeksperymentować i spróbować wczytać różne mapy.

% Nazwa mapy i adres serwara dostawcy mapy
nowa_mapa = 'hikemap';
url = 'tiles.wmflabs.org/hikebike';

% nowa_mapa = 'landscape';
% url = 'tile.thunderforest.com/landscape'

% Dodanie nowej mapy do basemap i jej wyświetlenie 
addCustomBasemap(nowa_mapa,url)
geobasemap hikemap

Jak widać trening odbył się na krakowskich Błoniach. Nanieśmy na mapę markery punktu początkowego i końcowego zarejestrowanego treningu oraz legendę:

% Położenie początkowe i końcowe
hold on; 
geoscatter(trasa.Latitude(1), trasa.Longitude(1), 150, 'g', 'filled');
geoscatter(trasa.Latitude(end), trasa.Longitude(end), 150, 'r', 'filled');
legend('Trasa', 'Początek', 'Koniec')

Używając funkcji geoscatter, możemy narysować pojedyncze punkty naszego położenia, „spróbkowane” przez urządzenie rejestrujące (zegarek biegowy lub smartfon). Da to obraz tego, jak często nasze położenie jest zapisywane przez urządzenie z GPS:

% Pojedyncze "próbki" na mapie
geoscatter(trasa.Latitude, trasa.Longitude, 60, 'filled')

Na powyższym rysunku możemy więc prześledzić krok po kroku zarejestrowane położenie. Mając do dyspozycji współrzędne geograficzne każdego punktu, można dodatkowo obliczyć odległości pomiędzy kolejnymi punktami rejestracji z użyciem funkcji distance i deg2km. Aby  lepiej zobrazować wynik obliczeń narysujmy histogram (rozkład) tych wartości:

% Obliczenie odległości pomiędzy kolejnymi próbkami położenia
dist_arc = distance(trasa.Latitude(1:end-1), trasa.Longitude(1:end-1), trasa.Latitude(2:end), trasa.Longitude(2:end))
kmdiff = deg2km(dist_arc)*1000;
figure; histogram(kmdiff,'BinWidth',0.1)
ylabel('Częstość wystąpienia'); xlabel('Dystans [m]'); grid on

Z rysunku wynika, że przy danej prędkości biegacza (ok. 11km/h), najczęściej zegarek próbkuje jego położenie co 3 metry. Z obserwacji tej można wysnuć wniosek, że gwałtowne zmiany położenia o promieniu mniejszym niż ta odległość nie zostaną przez zegarek zarejestrowane. Stąd biegacz powinien „brać zakręty” o dużym promieniu unikając sytuacji częstego zawracania bądź zmiany kierunku, gdyż to będzie prowadzić do dużych błędów w pomiarze dystansu. A skoro o dystansie mowa.. to policzmy jaka była całkowita długość treningu:

% Dystans całkowity
cumsum(kmdiff)

Ostatnia liczba 8058 to wyrażona w metrach długość analizowanej rejestracji czyli odbytego treningu.

Jak widzicie analiza danych z GPS i wyświetlanie przebytej trasy na mapach w MATLABie jest całkiem proste. Na tym zakończę ten cykl publikacji zachęcając wszystkich do własnych eksperymentów.

(Visited 256 times, 1 visits today)

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *