wtorek, 23 kwietnia 2013

Przygody z MeeGo i plikami GPX :-)

No to dzisiaj z nieco innej beczki :-)

   Żeby czasem odpocząć od aplikacji Androidowych, co jakiś czas próbuję sił w programowaniu na Nokię N9 z systemem MeeGo na pokładzie. Nie jest to rzecz regularna, ponieważ mam dostęp do tego urządzenia cyklicznie, ale zawsze to miłe urozmaicenie. A i przy okazji praktyka w wykorzystaniu platformy Qt, języka C++ i QML na pewno się przyda. Przyczyna jest prosta - korzystając z tego "frameworka" można tworzyć aplikacje od mobilnych, przez wbudowane aż po desktopowe. I to na wszystkie główne systemy operacyjne.
   O samym telefonie firmy Nokia nie będę się rozpisywał. Jednakże warto wspomnieć po krótce jego historię, ponieważ już w momencie premiery wiadomo było, że będzie to pierwszy i ostatni telefon Nokii z systemem MeeGo. Niestety wtedy już było wiadomo o mariażu fińskiego producenta telefonów z MałymMiękkim, który zapewne miał wpływ na podjętą decyzję finów ;-) Wydaje się, że telefon ten wypuszczono na rynek,tylko dlatego, że w tym momencie był już ukończonym produktem. Brak przyszłych aktualizacji niestety sprawił, że platforma ta, mimo że na prawdę porządnie i dobrze zrobiona, pozostała w cieniu i mało kto pisze na nią aplikacje.
   No i właśnie w tym momencie przejdę do meritum dzisiejszego posta. Czasem zdarza mi się jeździć rowerem - ot tak, dla zdrowia i przyjemności. I dla wprawy postanowiłem napisać prostą aplikację na moją N9, która zapisywałaby trasę mojego przejazdu w postaci pliku GPX. Plik GPX jest ustandaryzowanym formatem XMLa, który w założeniu ma ułatwiać wymianę danych między aplikacjami korzystającymi z danych pobieranych z odbiornika GPS. Oto przykładowy, prosty plik w formacie GPX (http://pygments.org/demo/76845/ ).

Przykladowy plik GPX wygenerowany przez aplikację

Na początku mamy typowe dla formatu xml deklaracje. Następnie (druga linia) znacznik gpx będący korzeniem naszego xmla. Pierwszym nodem jest metadata , w którym zamieszczamy przynajmniej granice geograficzne naszej trasy (minimalne i maksymalne wartości długości i szerokości geograficznej zmierzonej trasy), oraz czas zapisania dokumentu gpx (time).
Następnie mamy znacznik trk , który zawiera już dane z naszego odbiornika gps w telefonie. Cała trasa podzielona jest na segmenty (trkseg), które grupują kolejno następujące po sobie dane stanowiące logiczną całość. Np. dane z jednej trasy spaceru, w trakcie którego utracono na chwilę sygnał gps będą zapisane w dwóch segmentach. W reszcie przechowuje dane poszczególnych punktów pomiaru w znaczniku trkpt. W atrybutach zapisane są długość i szerokość geograficzna, a w znacznikach odpowiednio wysokość nad poziomem morza (ele) i dokładny czas dokonania pomiaru (time). Oczywiście niniejszy przyklad jest maksymalnie uproszczony, a sam standard gpx przewiduje dużo więcej możliwości. Zainteresowanych odsyłam do źródła (http://www.topografix.com/gpx/1/1/ ).
   Moja aplikacja testowa jest najprostsza, jak to tylko możliwe. W pliku MainPage.qml, tworzy i konfiguruje źródło danych GPS. W tym przypadku ustawiamy częstotliwość odczytów pozycji na jeden co 10 sekund (10000 milisekund), zaś sygnał o zmianie pozycji będzie uruchamiał funkcję updateGeoInfo, która współrzędne i czas ich pobrania wpisuje do etykiet wyświetlających te dane na interfejsie aplikacji. No i oczywiście przesyła te dane do metody writePosition klasy QGPXWriter.



   Zadaniem wyżej wymienionej klasy jest utworzenie dokumentu gpx, zapisanie do niego danych poszczególnych punktów pomiarowych (metoda writePosition ) oraz zapisanie utworzonego dokumentu do pliku na dysku telefonu.

Mimo swojej prostoty aplikacja działa bardzo dobrze i po każdym spacerze, czy jeździe na rowerze mogę pobrać z telefonu plik gpx z zapisem trasy i utworzyć na jego podstawie wpis w internetowych serwisach sportowych typu runkeeper, czy endomondo. Jak dla mnie - bomba, bo w końcu mogę Nokię N9 wykorzystywać to śledzenia mojej aktywności sportowej. No i przy okazji narodził się pomysł wykorzystania wiedzy, którą zdobyłem tworząc tą aplikację do stworzenia bardziej pełnego produktu.
Pełny kod aplikacji dostępny jest w serwisie bitbucket.
Miłej zabawy! :-)


Brak komentarzy:

Prześlij komentarz