Menuekopf

Dienstag, 9. Februar 2021

WRPElevationChart (Anleitung)

WRPElevationChart ist eine relativ 'leichtgewichtige' GPX-, TCX-, KML/KMZ-, FIT- (GPS)-Viewer App für Android.

Ursprünglich war die App ein rein auf manuelle Eingaben ausgelegter Höhenprofilgenerator, man könnte auch sagen, ein Prototyp bzw. eine Art Übungsprojekt, um mit der Android Grafikprogrammierung etwas vertrauter zu werden. 

Nachdem die App nun über ein Jahr nicht mehr weiterentwickelt wurde, hat letztlich die durch die Corona bedingte aufgezwungene Lockdown-Freizeit dazu geführt, dass ich mich dieser App die letzten Wochen wieder etwas angenommen habe (und die Familie hat es gedankt, da etwas Ablenkung das beste Mittel gegen den unvermeidlichen Lagerkoller zuhause ist).

Das Hauptaugenmerk liegt immer noch auf einer leichtgewichtigen App, die sich bewusst auf das Wesentliche beschränkt, nämlich - seit Version >= 1.0.1 - dem Import und der Visualisierung von GPS Daten. In Vers. 2.0 kam nun noch eine 3D Track-Chart Ansicht (3D Höhenprofil) hinzu.


Der manuelle Höhenprofilersteller gehört ebenfalls noch zum Funktionsumfang, wenngleich der Praxisbezug in Zeiten von Google Maps und GPS-Planungsportalen jeder Art eher gering sein dürfte. Aber die paar Zeilen zusätzlicher Code tun der App nicht weh und das Höhenprofil ist nach wie vor zentraler Bestandteil der Visualisierung.


Inhaltsverzeichnis:


Die Kernfunktionen:

  • Eingabe von Distanz- und Höhenwerten
  • Berechnung der Steigungsprozente
  • Zuweisung eines Titels (= Überschrift in der Profilgrafik)
  • Höhenprofil Erstellung (imperiale oder metrische Achsenbeschriftung)
  • Speichern/Wiederherstellen der erstellten Profildaten (XML Format)
  • (Neu) Berechnung der Auf-/Abstiegsmeter (justierbarer Hysteresefaktor!)
  • (Neu) Import von *.gpx, *.tcx und *.srp (TrainingLab Pro Activities) und KML/KMZ-Dateien (also von GPS basierten Daten, ab Vers. 1.1.14 auch (Garmin) *.fit Dateien)
  • (Neu) Mit dem Höhenprofil synchronisierte Trackanzeige als Kartenansicht (OSMDroid)
  • (Neu) Vier Online*-Karten
  • (Neu) Erweiterte Statistikdaten, wobei sich die Anzeige auf die reinen GPS-Daten stützt (diese App unterstützt derzeit keine physiologischen Daten wie z.B. Herzfrequenz, Geschwindigkeit, etc. -> die in der App angezeigten Geschwindigkeitswerte werden aus den GPS-Koordinaten und den dazugehörenden Zeitstempeln* berechnet)
  • (Neu) Track-Animation (virtuelle Fahrt)
  • (Neu ab Vers. 1.1.11) Kompatibilität mit der ebenfalls sehr leichtgewichtigen App GPS Logger (WRPElevationChart kann nun in GPS Logger als optionaler (GPS) Viewer zugewiesen und direkt aus GPS Logger zum Einsehen der aufgezeichneten Daten aufgerufen werden).
  • (Neu ab Vers. 1.1.14) Fit File Import (nur GPS-Koordinaten, Höhenwerte, SPD, Distanz und Zeitstempel -> eine tiefergehende Fit File Auswertung der Trainingsdaten wird womöglich in einer neuen App realisiert werden -> WRPElevationChart will ich aber bewusst einfach halten!)
  • (Neu ab Vers. 1.1.14) Verbesserte Sharing Funktionalität -> über die Teilen Funktion können die importierten Daten z.B. als Strecke an die Garmin Connect App übergeben werden.
  • (Neu ab Vers. 1.1.15) Einfacher Browser -> es kann ein Verzeichnis zugewiesen werden, in dem dann durch alle dort abgelegten *gpx, *.tcx, *.kml/kmz und *.fit Dateien mittels zweier Buttons geblättert werden kann.
  • (Neu ab Vers. 1.1.23): GPX-Datei und KML-Datei (Google Earth) Exporte
  • (Neu ab Vers. 1.1.23): WRPElevationChart kann über die 'Training hochladen/Datei teilen mit...' Funktion in der Wahoo Element App als externer Track- und Höhenprofil-Viewer genutzt werden (die protokollierten Trainings/Tracks können dann etwas besser in der Kartenansicht überflogen werden und zusätzlich an die Google Earth App weitergereicht werden, was mit der Elemnt App in dieser Form nicht möglich ist).
  • (Neu ab Vers. 1.1.24): Die X-Achse des Höhenprofils kann nun auch im Zeitachsenmodus dargestellt werden (nur wenn Importdaten Zeitstempel enthalten(!) -> zum Switchen der X-Achse Höhenprofil lange antippen)
  • (Neu ab Vers. 1.1.25): Optionale Zeitachse (Höhenprofil lange antippen)
  • (Neu ab Vers. 1.1.28): invertierte Distanzanzeige hinzugefügt (links oben in der Kartenansicht)
  • (Neu ab Vers. 2.0.0): 3D (GPS) Höhenprofil (über rechtsseitiges Hamburger Menü aufrufbar)
  • (Neu ab Vers. 2.0.4): Optionale Skalierung des 3D Diagramms (Nullhöhe -> 3D Grafik lange antippen)
  • (Neu ab Vers 2.0.5): Gestensteuerung komplett neu programmiert, 'Predictive back gesture' Unterstützung (hoffe es funktioniert :-))
  • (Neu ab Vers 2.0.7): Stabilitätsverbesserungen, Geschwindigkeitskonvertierer (Optionsmenü)
  • (Neu ab Vers 2.0.8): Fit-File Course Export, berechnete Auf-/Ab-Positionswerte (in den Einstellungen aktivierbar) und diverse Verbesserungen.
  • (Neu ab Vers 2.0.9): Fit-File Course Export modifiziert und div. Verbesserungen
  • (Neu ab Vers 2.0.15): Zooming implementiert

* Bei Verwendung der Kartenansicht werden DATEN (Kartenauschnitte, sogenannte Tiles) vom Internet HERUNTERGELADEN. Dies kann bei Verwendung einer mobilen Datenverbindung zu entsprechenden Kosten führen. Eine WLAN-Verbindung bzw. eine mobile Datenflat wird daher dringlichst empfohlen! Die heruntergeladenen Kacheln werden aber gecached, sodass man Karten einge gewisse Zeit vorhalten kann.

* Die Berechnung der Geschwindigkeitswerte anhand der GPS-Koordinaten und Zeitstempel ist leider mit diversen Ungenauigkeiten verbunden, was zu sprunghaften Geschwindigkeitswerten führen kann. Das ist systembedingt und lässt sich leider nicht vermeiden. 

Dem TCX-Format - und manchmal(!) auch dem GPX-Format - können zwar mitunter Geschwindigkeitswerte via spezieller 'SPD'-Tags entnommen werden, aber ein Großteil der im Netz verfügbaren GPX-Dateien enthalten keinerlei Geschwindigkeitsdaten und die Auswertung dieser spezifischen Daten ist auch nicht das Hauptaugenmerk dieser App.
Die angezeigten Geschwindigkeitswerte bilden die Realität also nur näherungsweise ab!

Ab Vers. 1.1.23 werden die Geschwindigkeitswerte bei *.fit, *.gpx und *.tcx Importen nun übernommen, sofern die Importdaten Geschw.-Werte enthalten, was bei *.fit basierten Aufzeichnungen eigentlich fast immer der Fall ist.

Die App gibt es übrigens im Google Play Store. Das Betastadium hat die App formal hinter sich gelassen, sie befindet sich aber noch in einer aktiven Entwicklungsphase, sodass es immer mal größere Änderungen geben kann.

Wenn ihr der App etwas abgewinnen könnt, dann bewertet die App bitte im Play Store positiv. Diese App ist (werbe)frei, aber Bewertungen sind wichtig*, da die App sonst im Play Store niemals in einer Suchliste auftauchen wird (WRPElevationChart weist mittlerweile Userzahlen bzw. Installationen deutlich im dreistelligen Bereich auf, Feedback im Google Play Store ist aber nach wie vor Mangelware).
Jetzt bei Google Play

Anleitung:

Öffnet man die App, wird man zuerst einen leeren Bildschirm sehen. Seit Vers.1.1.10 begrüßt Euch die App nun mit einem speziellen Startbildschirm.

Manuelle Höhenprofilerstellung:

Ihr könnt nun entweder ein Höhenprofil manuell Erstellen, was nicht weiter erklärungsbedürftig sein sollte. Wie auch immer, hier ein kleines Video, welches das Vorgehen - noch mit der alten App im Urzustand - illustriert. 

Datenimport:

Wesentlich interessanter ist sicherlich der Import GPS basierter Daten. Unterstützt werden im Moment *.gpx, *.tcx, *.kmz/kml, *.srp (TrainingLab Pro) und *.fit Dateien. Ich will aber gleich anmerken, dass es bei diesen Formaten sehr viel Wildwuchs gibt und manche Dateien nicht 100% den Spezifikationen entsprechen. 

Es kann daher gut sein, dass eine Datei mitunter nicht eingelesen werden und im schlimmsten Fall die App sogar zum Absturz* bringen kann. Falls letzteres der Fall ist, werde ich bei Zusendung einer problematischen Datei natürlich versuchen, die App entsprechend abzusichern.

Das Einlesen erfolgt über das erste Icon in der Icon-Bar (das Folder-Icon mit dem Pfeil nach unten, siehe animiertes GIF). Daraufhin sollte sich der Android eigene Dateiauswahldialog öffnen, über den man dann eine dieser Dateien auswählen kann. 

Nachdem die Datei eingelesen wurde, werden die GPS-Daten sofort auf dem Bildschirm projiziert. Sofern die Importdatei Höhenwerte beinhaltet, wird ein Höhenprofil angezeigt, anderenfalls bleibt das Höhenprofil leer. 

Das Höhenprofil kann auch nicht ausgeblendet werden, da es für die Synchronisation mit dem Track essentiell ist -> wenn man im oberen Bereich mit dem Finger über die - auch leere - Höhenprofilgrafik streicht, kann man in der Kartenansicht einen wandernden Marker sehen.

Die X-Achse des Höhenprofils kann ab Vers. 1.1.24 auch im Zeitachsenmodus dargestellt werden (nur wenn Importdaten Zeitstempel enthalten(!) -> zum Switchen der X-Achse die Höhenprofilgrafik lange antippen)

Speichern als XML:

Das Speichern erfolgt mehr oder weniger analog (über den zweiten Button in der Icon Bar, also das Folder-Icon mit dem Pfeil nach oben).

ACHTUNG: das Abspeichern in das XML-Format ist verlustbehaftet, da nur die GPS-Koordinaten, Distanz- und Höhendaten und die Zeitstempel (in Sekunden) gespeichert werden. Diese Funktion ist primär für manuell erstellte Höhenprofile gedacht. Man kann damit auch Importdateien entlausen, weil die Dateien in der Regel kleiner werden, aber die App ist kein Formatkonverter und beim Importieren werden nur jene Daten berücksichtigt, die für die jetzige Viewer-Funktionalität nötig sind!

Spezielle Funktionen:

Diese App ist wie gesagt als einfacher GPS-Viewer konzipiert. Tiefergehende Auswertungen sind derzeit nicht implementiert und in dieser App auch nicht angedacht, was aber nicht heißen muss, dass es diesbezüglich gar keine Erweiterungen mehr geben wird (es gab schon einige :-) ). Darüber hinaus ist es gut möglich, dass es später eine größere App geben wird, die sich dann etwas an das TrainingLab Pro Projekt anlehnen wird. Die Zeit wird zeigen, wo die Reise hingehen wird und ob es überhaupt Sinn macht, die TrainingLab Pro in gewisser Weise zu portieren. 

Eine GPS-Tracking Funktionalität wird es in dieser App aber sicherlich nicht geben. Da gibt es wirklich eine Vielzahl sehr guter Apps im Google Play Store -> ich selbst verwende fürs spontane* Tracken per Smartphone gerne eine App Namens GPS Logger, die neuerdings (ab Vers. 1.1.11) auch sehr gut mit WRPElevationChart verknüpft werden kann :). Meistens nutze ich hierfür aber echte GPS Geräte (Sportuhren, Bike-Computer, kleine GPS-Logger, etc.), mein Smartphone ist fürs GPS-Tracken nicht die erste Wahl.

Nichtdestotrotz weist die App dann aber doch einige spezielle Funktionen auf, die ich bisher in anderen - ähnlichen - Apps nicht gefunden habe und die ich hier kurz aufführen will.

Erweiterte Statistikdaten:

Unterhalb der Profilgrafik kann man im GPS View Modus ein paar Eckdaten einsehen. Die in der Mitte sichtbaren Daten sind statisch (Gesamtdistanz und Dauer in Stunden, falls der Importdatei die dazugehörenden Zeitstempel entnommen werden konnten, was aber nicht immer der Fall sein wird!).

Die Statistikwerte auf der linken Seite sind dynamisch, das heißt, sie werden mit der oben erwähnten Fingergeste synchronisiert. Auf diese Weise kann man die aktuellen sich unter dem 'Cursor' befindenden Distanz- und Höhenwerte genau ablesen. Auch die aktuellen Geschwindigkeitswerte können abgelesen werden, sofern die Importdatei Zeitstempel enthält. Siehe aber obige Ausführungen bzgl. der Ungenauigkeit der Geschwindigkeitswerte.

Weiter unten habe ich ein kleines Bildschirmaufnahme Video verlinkt, auf dem das alles genau zu sehen ist. Das Video ist derzeit von YouTube übrigens als Adult-Inhalt eingestuft und kann daher nicht von jedem User eingesehen werden -> verstehen muss man das nicht :)

Kumulierte Auf- und Abstiegswerte:

Als kleines Schmankerl kann die App auch die Auf- und Abstiegswerte anhand eines justierbaren Hysteresefaktors berechnen. Damit ist es begrenzt möglich, die Aufstiegswerte einer Tour aufzuschlüsseln. 

Gerade bei GPS basierten Daten gibt es aber leider auch hier Ungenauigkeiten, die darin begründet liegen, dass GPS Höhendaten häufig sehr sprunghaft - manchmal aber auch eher verrauscht - sind. Hier verweise ich wieder mal auf einen Beitrag eines Blog-Kollegen. 
Die App berechnet die Werte anhand eines Hysteresefaktors. Zusätzlich hat die irgendwann neu hinzugekommene Datenglättung - die bei GPS-Daten eigentlich (fast) immer angebracht ist - Auswirkungen auf diese Berechnung. Wie auch immer, wie man es macht, man macht es verkehrt und daher wird diese Berechnung in dieser App sehr wahrscheinlich auch nicht weiter optimiert werden (erste Versuche eine Datenglättung bei dieser Berechnung vorzuschalten waren dann auch nicht so vielversprechend. Mittlerweile wird diese Datenglättung aber doch berücksichtigt).

Die Auswirkungen des Hysteresefaktors - und der Datenglättung - kann man dem vorangestellten animierten GIF entnehmen.

Daraus folgt, je nach Datenlage können jene berechneten Werte einigermaßen stimmig sein, sie können aber auch brutal daneben liegen. Man kann den GPS-Daten in der Regel auch nicht entnehmen, ob die protokollierten Daten mit einem Höhenmesser protokolliert wurden oder rein GPS-basiert gemessen wurden.

Geodatenanzeige:

Dem wandernden Positionsmarker können die aktuellen GPS-Koordinaten entnommen werden. Dazu einfach das gelbe Markersymbol in der Kartenansicht anklicken, woraufhin sich ein kleines Infofenster öffnen sollte.

Dieses Infofenster kann übrigens auch bei der 'JumpTo-Home-Location' eingeblendet werden, indem das kleine Männchen angeklickt wird.

Durch Anklicken des Infofensters kann dieses auch wieder ausgeblendet werden.


Kleiner Tipp am Rande: Wenn das Infofenster (wandernder Positionsmarker) eingeblendet ist und man in der Höhenprofilgrafik mit dem Finger navigiert, werden die GPS-Koordinaten übrigens on-the-fly aktualisiert.

JumpTo-Home-Funktion:

Über das rechtsseitige Icon kann man sich im GPS-View Modus die zuletzt im Smartphone bekannte Position anzeigen lassen. Hierfür sind erweiterte Rechte nötig, die ich der Vollständigkeit an dieser Stelle noch einmal aufführen will: 

    Standortdaten [ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION]:
  • Werden nur benötigt, falls man die 'JumpTo'-Home Funktion in der Kartenansicht nutzen will, die nichts anderes macht, als die Karte auf die zuletzt bekannte Lokation zu zentrieren! Diese App weist (derzeit) keine GPS-Logging Funktionen auf!








Ansicht zentrieren:

Mit dem Höhenprofil-Icon kann die Ansicht aktualisiert werden. 
Das bewirkt, dass die Karte bestmöglich skaliert wird, sodass der gesamte Track auf der Karte angezeigt werden kann. 

Also quasi ein Unzoom bzw. Neuausrichten der Kartenansicht, wenn man zuvor in der Karte gezoomt oder die Karte per Fingergeste verschoben hat.

Dieser Button rief ursprünglich nur einen Refresh (Neuzeichnen) der Höhenprofilgrafik auf, was jetzt natürlich sinnvollerweise mit der Kartengrafik verknüpft ist (daher das Höhenprofilsymbol als Refresh-Icon :) ).

Auch im Höhenprofildesign-Modus (manuelle Höhenprofilerstellung) bewirkt dieser Button ein Neuzeichnen der Höhenprofilgrafik, was Sinn machen kann, falls die Gridnavigation einmal hakt.



Track-Animation (virtuelle Fahrt):

Diese Animation ist rein experimentell und wurde quasi meinen HRMProfil und TrainingLab Pro Windows Programmen entlehnt. Über den rechtsseitigen unten in der Kartenansicht platzierten Button (Play-Symbol) kann die Animation gestartet und auch wieder gestoppt werden. Wie gesagt, rein experimentell -> je nach Datenfülle erfolgt diese Animation mal weicher oder auch weniger weich, also eher ruckelig. An dieser Baustelle werde ich wohl nicht mehr viel Hand anlegen (zumindest nicht in dieser App), aber man soll bekanntlich nie nie sagen :)

Das mit dem nie hätte sich dann mal wieder bestätigt, weil es zuletzt doch zu sehr in den Fingern gejuckt hat. Die sehr einfache gehaltene Track-Animation ist jetzt zur virtuellen Fahrt mutiert (siehe Screenshot) und damit hätte diese App ab der kommenden Vers. 1.1.06 funktionstechnisch mit meinen beiden Windows-Programmen gleichgezogen. Über die mittig plazierte sogenannte Android-Seekbar - das ist eine mit dem Finger justierbare Progressbar - kann das Animationstempo jederzeit justiert werden. 


Die oben links zu sehende Tachonadel zeigt die Positionsgeschwindigkeitswerte stark gedämpft an. Es ist daher völlig normal, dass die Tachonadel mitunter Geschwindigkeitsspitzen verschluckt. Einige Vorabtester hat das etwas irritiert, anders macht es aber - bei in erster Linie mit GPS protokollierten Daten - keinen Sinn, da die Tachonadel sonst immer hin- und herspringen würde (
wenn man das Abspieltempo mittels der Seekbar sehr stark herunterregelt wirkt sich die erwähnte Dämpfung weniger stark auf die Tachonadel aus).
Das trifft übrigens auch auf die berechneten textbasierten Steigungsprozentwerte zu, die allerdings oben im Textfeld nicht gedämpft werden (seit Vers. 1.1.09 können die Steigungsprozentwerte aber optional geglättet werden).
Bei dieser App handelt es sich - wie mehrfach betont - um eine bewusst einfach gehaltene GPS-Viewer-App. 
Möglicherweise wird es später einen App-Ableger geben, bei dem die Datenauswertung im Vordergrund stehen wird und daher auch spezielle Glättungsfilter über die Datenreihen gelegt werden. Bei dieser App wurde aber bewusst darauf verzichtet!
Bei TCX-Importen z.B., die auf echten Sportaufzeichnungen basieren (dedizierte externe SPD-Sensoren, barometerbasierte Höhendaten, etc.) tritt das Problem in dieser ausgeprägten Form nicht auf, da die importierten Daten in der Regel weniger verrauscht sind. 

Das ist also kein Fehler, sondern dieses Verhalten wird in dieser App von mir bewusst in Kauf genommen -> sofern GPS Daten aus Routen-Planungsportalen eingelesen werden, kann man in der Regel selbst mit Glättungsfiltern relativ wenig bewirken, da die mit diesen Planungsportalen erstellten Routen einfach zu wenig Stützdaten aufweisen. 

Über Sinn und Unsinn dieser Funktion muss man auch nicht diskutieren, jeder Jeck ist bekanntlich anders (bei Laufrunden kann es aber ganz spaßig sein, das Lauftempo der Tachonadel zu entnehmen) :)

Gut möglich, dass irgendwann auch noch eine Geotagging-Funktion für Fotos dazukommen wird, aber das wird die Zeit weisen.

Zusammenspiel mit anderen Apps (GPS-Loggern):

Viele GPS-Logger Apps ermöglichen den Export der protokollierten Daten im GPX- oder KML- Format. WRPElevationChart kann die exportierten GPS/KML-Dateien über den Dateiauswahldialog öffnen und visualisieren.

Die weiter oben erwähnte App GPS-Logger bietet sogar die Möglichkeit einen speziellen (GPS)-Viewer einzubinden, sodass der Umweg über den Export und das manuelle Einlesen entfällt.

Aufgrund der Tatsache, dass bei den Berechnungen unterschiedliche Formeln Anwendung finden, kann es bei den berechneten Statistikwerten zu geringfügigen Abweichungen kommen.

Erweiterte Sharing (Teilen) Funktionalität:

Diese App bietet zwei Sharing Funktionen an. 
  • Teilen der Grafik als Screenshot (über das linksseitige Hamburger Menü)
  • Teilen (Übergabe) der GPS-Daten an eine externe App in Form einer GPX-Übergabedatei (über das Teilen Icon oben in der Icon Bar) (ab Vers. 1.1.14)

Die erste Variante bedarf wohl keiner weiteren Erläuterung, da hier nur eine Bildschirmgrafik erstellt und geteilt wird. Die GPS-Daten Übergabe kann ein sehr nützliches Werkzeug sein, da es damit möglich ist, die Daten intern zu konvertieren und diese im nächsten Schritt an die Garmin Connect App (oder eine App eurer Wahl) als Strecke zu übergeben. 

Da viele Apps nicht alle der von WRPElevationChart unterstützten Dateiformate einlesen können (z.B. wird das *.fit Dateiformat unter Android m.W. nur von sehr wenigen Apps erkannt), kann diese App die Konvertierung* übernehmen. Ich konnte auf diese Weise schon einige der auf meinem Smartphone - oder auch in meiner Dropbox oder GDrive - abgelegten Touren direkt an die Garmin Connect App übergeben, was sonst viel Konvertiererei bedurft hätte. Mit dieser App geht das jetzt quasi in einem Rutsch :)

* Konvertierung: ich will aber anmerken, dass WRPElevationChart kein echtes Konvertierungstool ist, sondern nur die essentiellen GPS-Parameter in eine GPX-Datei exportiert und die so erstellte GPX-Datei weiterreicht. Für den angedachten Verwendungszeck reicht das auch völlig aus!

Um etwaigen Anfragen zuvorzukommen: es ist gut möglich, dass ich die Datenübernahme ausbauen werde (trainingspezifische Paramenter wie Herzfrequenz, Leistung, etc.). Das Ergebnis wird dann aber eine neue App sein, die auch nicht mehr Freeware sein wird, da die Umsetzung dieser Funktionen wirklich sehr zeitaufwendig sind. WRPElevationChart verfolgt ein anderes Ziel (einfacher GPS-Daten Viewer), wird dafür aber eine freie App bleiben (zeitaufwendig war die Entwicklung dieser App allemal).

Browsermodus:

Ab Vers. 1.1.15 bietet die App einen einfachen Browsermodus. Diese Funktion kann sehr sinnvoll sein, wenn man viele GPS-Daten auf seinem Smartphone gespeichert hat, die man z.B. an die Garmin Connect App übergeben will. 
Da es mitunter vorkommt, dass diese Importdateien keine sprechenden Namen aufweisen, kann man von außen nicht einsehen, welche Touren (Routen) in den Dateien gespeichert sind. 
WRPElevationChart kann die unterstützten GPS-Dateien normalerweise dank eines leistungsstarken Parsers sehr schnell öffnen, sodass man den Inhalt dieser Dateien ohne viele Verrenkungen einsehen kann. Hat man die gewünschte Datei ausfindig gemacht, kann man diese mit der Teilen-Funktion sehr einfach an die App seiner Wahl - in dem Fall an die Garmin Connect App - übergeben.

Für mich ist dieser einfache Browser ein sehr nützliches Boardwerkzeug -> um ehrlich zu sein, diese angedachte Browser-Funktion war anfangs auch der Grund, diese App überhaupt noch einmal in Angriff zu nehmen. GPX-Viewer für Android gibt es mittlerweile ja recht viele im Google Play Store, die meisten sind auf ihre Weise auch wirklich sehr gut, aber häufig etwas überfrachtet, sodass ein einfaches Browsen mit vielen dieser Apps gar nicht möglich ist. Auch wird das Garmin/Dynastream eigene *.fit Format, das in der Sportwelt mittlerweile eine Art Industriestandard verkörpert, von vielen Apps derzeit (noch) nicht unterstützt. 
Da diese App beim Teilen das importierte Format auf ein einfaches *.gpx Format herunterbricht, bieten sich - was die Routenübergabe betrifft - viele Möglichkeiten.

Die Arbeitsweise ist folgende:
  • Zuweisen eines Verzeichnis 
    (die App scannt das Verzeichnis nach den Dateitypen *.gpx, *.tcx, *.kml/kmz und *.fit ab und speichert diese aus Performancegründen in einer temporären Liste -> je nach verwendeter Android Version wird unter Umständen eine - womöglich etwas irritierende - Hinweismeldung eingeblendet, die man bejahen muss -> die App kann die Dateien im zugewiesenen Verzeichnis nur dann scannen, wenn der User das auch erlaubt!). Meine App interessieren nur jene oben aufgeführten Dateitypen und diese Liste wird auch nur lokal auf dem eigenen Smartphone für diese spezielle Browser-Funktion verwendet! 
    HINWEIS: Leider ist es seit Android 11 normalen Apps nicht mehr möglich, den Download Folder komplett einzuscannen -> Tracks daher am besten in einem speziellen Folder auf euren Geräten ablegen -> das kann z.B. ein Unterordner im Download-Folder sein.
  • Mittels zweier Navigations-Buttons - diese werden nur im Browsermodus eingeblendet! - oben in der Mitte der Kartenansicht kann nun vor- und zurückgeblättert werden. Drückt man lange auf einen der beiden Navigations-Buttons, wird an den Anfang bzw. zum Ende der Liste gesprungen.

Das zugewiesene Verzeichnis wird normalerweise innerhalb einer Arbeitssitzung gecached (nur solange, bis die App beendet wird). Will man ein anderes Verzeichnis fürs Browsen zuweisen, muss man entweder mit der Android Zurück-Taste den Startbildschirm aufrufen und dort den Browser Modus aufrufen oder im linksseitigen 'Options'-Menü den Arbeitsmodus Browser - bei bereits aktivem Browsemodus - erneut aufrufen. 
Ist ein anderer Modus (Design- oder GPS View Modus) aktiviert und wurde bereits ein Verzeichnis zugewiesen, dann bewirkt das Wechseln in den Browser-Modus ein Neuladen der gecachten Liste, anderenfalls erscheint der Android eigene Dateiverzeichnisauswahldialog zwecks Zuweisung eines neuen Verzeichnisses. 
Das klingt jetzt vielleicht etwas kompliziert, aber ihr werdet das Handling sehr schnell raushaben, wenn ihr mit dem Arbeitsmodus ein paar mal spielt :-)

In Kombination mit der Share (Teilen) Funktion sieht das dann in etwa so aus:

3D Modus:

Neu hinzugekommen in Vers. 2.0 ist der 3D Modus. Dieses neue 3D GPS Track Chart (3D Höhenprofil) wurde dem TrainingLab Pro Projekt entnommen. Die Umsetzung dieser Idee habe ich übrigens ebenfalls hier in meinem Blog etwas ausführlicher beschrieben. 

Falls es interessiert, hier der Link: 

Der 3D Modus kann über das Optionsmenü oben rechts in der Caption-Bar aufgerufen werden. Da solch ein 3D Diagramm etwas mehr Platz benötigt, wird die unten platzierte Karte entsprechend verkleinert. Auf sehr kleinen Smartphones wird der Platz dann allerdings doch etwas eng.

Für das 3D Diagramm gibt es in den Grundeinstellungen einen eigenen Einstellungsblock. Die meisten Optionen sollten selbstsprechend sein.

Folgende Besonderheiten will ich hier aber kurz erläutern:

  • Die 3D Grafik wurde mittels einfacher 2D Canvas Methoden implementiert. Diese 2D Grafikoperationen sind auf Smartphones nicht so performant - normalerweise programmiert man solche 3D Sachen in OpenGL (was für dieses Projekt aber den Rahmen sprengen würde).
    Daher müssen die darzustellenden Trackpunkte mit dem bekannten Douglas-Peuckers Algorithmus vorab etwas reduziert werden. Dies kann in den 3D Diagramm Einstellungen justiert werden.
    Auf aktuellen Mittelklasse-Smartphones hat sich eine maximale Punktzahl von 1000 Datenpunkten bewährt. Auf eher schwachbrüstigen Smartphones sollte man diesen Wert ggfs. auf 600 Datenpunkte herabsetzen. Allerdings kostet natürlich auch die Reduzierung der Datenpunkte etwas Zeit, was dann bei der erstmaligen Anzeige der 3D Grafik zu einer leichten Verzögerung führen kann (alte Entwicklerweisheit: einen Tod stirbt man immer!).

    Hier ist etwas Fingerspitzengefühl nötig. Das Ziel sollte sein, eine nahezu flüssige Rotation der 3D Grafik zu erreichen. Auf sehr alten Smartphones wird es aber mitunter trotzdem etwas Ruckeln. Übrigens wäre das auch bei Verwendung der OpenGL Technik der Fall, da OpenGL mehr oder weniger leistungsstarke Grafikchipsätze voraussetzt. Mein Ansatz ist daher sogar etwas weniger leistungshungrig. Aber wenn man es mit den Datenpunkten übertreibt, dann kann das trotz Verwendung von Threads zu ANRs führen. Hier ist also etwas Selbstdisziplin nötig :) Die Reduzierung redundanter Datenpunkte hat auf die visuelle Projektion der 3D Grafik übrigens weit weniger Einfluß als man denkt.

    Hinweis: die Option '0 = ohne Filterung' ist nur zu Testzwecken gedacht. Bei sehr vielen Datenpunkten wird das den Aufbau der 3D Grafik merklich ausbremsen!

  • Ab Vers. 2.0.4 kann nun auch die Nullhöhe justiert werden.
    Hier gibt es zwei Optionen: Nullhöhe auf Meereshöhe und Minimale Trackhöhe.
    Beide Skalierungsarten haben ihren Sinn. Null auf Meereshöhe bietet sich bei echten Bergprofilen an, minimale Trackhöhe ist bei Flachprofilen das Mittel der Wahl (weil dann selbst kleinste Erhöhungen in der 3D-Grafik aufschlagen).
    Da diese Option häufiger umgeschaltet werden muss, kann man die Nullhöhenskalierung auch direkt in der 3D Grafik wechseln:

    Mit einem Finger etwas länger (ca. 1 Sek.) die 3D-Grafik antippen (Touchgeste).

    Das scheint mir die sinnvollste Methode zu sein -> man kann diese Option aber auch über das Einstellungsmenü ändern (doppelt hält besser :) ).

Die 3D Grafik kann mittels Gestensteuerung gesteuert werden. Durch Swipen (links, rechts) kann das 3D Höhenprofil gedreht werden (0 - 360 Grad), mittels des rechtseitigen Scrollbalkens kann der Neigungswinkel justiert werden (0 - 90 Grad). Letzteres geht auch mit einer Zwei-Finger-Touchgeste (zwei Finger und nach oben/unten Swipen), aber die Variante mittels des Scrollbalkens hat sich hierfür als praxisgerechter erwiesen. Siehe auch den folgenden Abschnitt.

Der 3D Modus ist derzeit auf die Verwendung von Smartphones ausgerichtet. Dreht man das Display, wird im Landscape-Modus die Karte ausgeblendet und das 3D Höhenprofil nimmt den ganzen Platz ein. 

Unterstützte Gesten:

Bei moderne Smartphones spielt die Gestensteuerung natürlich eine zentrale Rolle und, wie weiter oben angedeutet, unterstützt WRPElelvationChart auch die ein oder andere Geste.

Die unterstützten Gesten sind vom jeweils aktuellen Diagrammtyp abhängig. Die Gesten des 2D und des 3D Diagramms unterscheiden sich ein klein wenig voneinander. Diese Gesten müssen direkt auf der 2D/3D-Diagrammgrafik erfolgen.

2D-Diagramm:
  •     Nach links oder rechts Wischen -> Marker verschieben
  •     Langes Antippen -> Umschalten zwischen Entfernungs- und Zeit X-Achse
  •     Doppelt Tippen -> in den 3D-Modus wechseln
    
3D-Diagramm:
  •     Nach links oder rechts Wischen -> 3D-Diagramm drehen
  •     Mit zwei Fingern nach oben oder unten Wischen -> 3D-Diagramm neigen
  •     Langes Antippen -> Umschalten zwischen Meeresspiegel- und minimaler Trackhöhe
  •     Doppelt Tippen -> in den 2D-Modus wechseln


Zooming:

Ab Vers. 2.0.15 kann nun auch in den Profilgrafiken (2D- und 3D-Charts) gezoomt werden.

Möglicherweise werden einige User sich jetzt fragen, ob das bei einem Smartphone GPS-Viewer, der ja auf eher kleineren Smartphone-Bildschirmen ausgeführt wird, überhaupt Sinn macht.
 
M.E. kann das Zoomen sehr wohl sinnvoll sein, gerade beim 3D-Chart, weil ihr in der Gesamtansicht die Serpentinen eines Anstiegs nicht wirklich einsehen könnt. Zoomt ihr aber in die Grafik hinein, um in einen bestimmten Anstieg tiefer hineinzuschauen, dann könnt ihr anhand der 3D-Grafik sehr gut die Charakteristik eines Anstiegs erkennen. Gut zu sehen an der Alp d'huez Etappe der Tour de France.

Das Zoomen kann auf zwei Arten realisiert/eingeleitet werden:

1.) Auf klassische Art, über einen entsprechenden Auswahldialog, über den die Zoom Start- und End-Parameter per Texteingabe zugewiesen werden (was sich in der ersten Beta Version allerdings als etwas holprig erwiesen hat, da man auf dem Smartphone ja gerne per Gestensteuerung schnell zum Ziel kommen will).

2.) Über eine Art Gestensteuerung. Dazu einfach wie gewohnt in der 2D-Grafik mittels Swippen den Marker zur gewünschten Position bewegen. Die jeweils aktuelle Marker Position kann dann als Zoom-Parameter mittels langer Anklick-Geste zugewiesen werden (ohne dass ihr Euch durch nervende Dialoge oder verschachtelte Menüs durchhangeln müsst).
  • Mittels langem Anklicken auf das linksseitige Statistiktextfeld wird die Zoom-Startposition zugewiesen.
  • Langes Anklicken des mittleren Statistiktextfeld weist die Zoom-Endposition zu.
  • Langes Anklicken des Map-Provider Buttons (oben rechts in der Kartenansicht) bewirkt ein Unzoom.
Ich habe Gestensteuerung jetzt bewußt in kursiver Schrift hervorgehoben, da das natürlich nicht die klassische Zoom-Geste ist, die man in Android zum Zoomen nutzt. 

Diese spezielle Variante ist aber von der Bedienung her (fast) genauso schnell durchführbar und hat den Vorteil, dass ihr die Zoom-Parameter sehr akkurat zuweisen könnt. Die klassische Zwei-Finger Zoom Geste, die normalerweise in Android fürs Zoomen Verwendung findet, führt nämlich häufig dazu, dass man die gewünschten Punkte nicht haargenau trifft. Mit meiner Variante kann man aber sehr gut und genau den gewünschten Anstieg eingrenzen und die Parameter im nächsten Schritt als Zoom-Parameter durchreichen.

Und die Zweckentfremdung, der sowieso immer sichtbaren Textfelder, hat den großen Vorteil, dass ich auf dem doch sehr begrenzten Platz (kleines Smartphone Display) keine weiteren - nur für das Zoomen genutzte - Buttons einbetten muss. Auf diese Weise kann man m.E. das Beste aus dem vorhandenen Platz herausholen. 

Übrigens könnt ihr auch in der Kartenansicht durch Anklicken des eingeblendeten Tracks den Positionsmarker beinflussen. Das kann in der 3D-Grafik von Vorteil sein, weil man, dort technisch bedingt, Positionen in der 3D-Höhenprofilgrafik nicht markieren kann. Allerdings ist das Markieren über die Kartenansicht nicht sonderlich genau, da die angetippte Kartenposition auf die Chartposition umgerechnet werden muss. Daraus folgt, am Einfachsten und Genauesten könnt ihr wirklich über das 2D-Chart die Zoom-Parameter zuweisen.

Hier noch ein kleines YouTube Short, auf dem ihr das Vorgehen noch einmal einsehen könnt:


(Grund-)Einstellungen:

Die meisten Einstellungen dürften größtenteils selbstsprechend sein, daher werde ich mich an dieser Stelle auf einige Besonderheiten beschränken.

In der Kartenansicht kann mit dem rechtsseitigen oberen Button eine Online-Karte ausgewählt werden. Die Auswahl bewirkt in der Kartenansicht sofort ein Neuzeichnen der Karte.

Unter der Kategorie Berechnungen (Einstellungen, ab Vers.1.1.10) können einige Anpassungen vorgenommen werden, die Einfluss auf einige berechneten Werte haben.



  • Hysteresefaktor: dieser Faktor bestimmt die Berechnung der Auf- und Abstiegswerte, die in der Höhenprofilgrafik rechtsseitig (am Rand) zu sehen sind. Hierbei gilt, je größer der H.-Faktor, desto weniger Auf- und Abstiegsmeter werden normalerweise berechnet.
    Leider kann ich hier keine allgemeingültige Empfehlung aussprechen. Der Defaultfaktor lautet Eins (1), der m.E. einen guten Kompromiss darstellt und verhindert, dass jeder noch so kleine Hubbel (kleinere Bodenerhebung) in die Berechnung der Aufstiegsmeter einfließt. Bei reinen GPS-Aufzeichnungen (= GPS-basierte Höhenwerte) oder bei in Tourenportalen erstellten Routen kann es mitunter Sinn machen, einen höheren Faktor zu verwenden. Der bevorzugte Faktur dürfte also jeweils von der Art der Importdaten abhängig sein.
  • Glättungsfaktor: findet derzeit bei der Anzeige der Geschwindigkeits- und Steigungsprozentwerte im linksseitigen dynamischen Statistikpanel Anwendung. Darüber hinaus hat der Glättungsfaktor - neben dem zuvor beschriebenen Hysteresefaktor - auch Einfluß auf die Berechnung der Auf- und Abstiegswerte. Der Defaultfaktor lautet 20 und hat bei meinen Testimporten alles in allem die besten Ergebnisse geliefert. Aber auch dieser Faktor ist wieder einmal stark von den Eingangsdaten abhängig, da hier wirklich sehr viele Faktoren (Samplingrate der Aufzeichnung, GPS basierte Daten oder sensorbasierte Daten, etc.) mit hineinspielen.
    Da die Glättung mehr oder weniger eine Filterung von Ausreiserwerten bewirkt - und Spannungsspitzen egalisieren kann -, hat die Glättung auch Einfluss auf die Berechnung der Maximalgeschwindigkeit. Bei GPS basierten Aufzeichnungen kommen häufig sehr viele Ausreiserwerte vor, ungefiltert sind die Geschwindigkeitswerte daher oftmals wenig aussagefähig.
  • Schwellenwert Netto-Geschwindigkeit: Dieser Wert spielt eine Rolle, wenn eine Aufzeichnung viele Unterbrechungen - wie Ampelstopps beim Radfahren und ähnliches - aufweist, die natürlich große Auswirkungen auf die reale Nettozeit haben.
    Geschwindigkeiten unterhalb dieses Schwellenwertes werden also quasi gefiltert, was dazu führt, dass die berechnete Nettozeit gegenüber der Gesamt(brutto)dauer abnimmt. Und eine kürzere Nettozeit ergibt dann natürlich eine höhere Durchschnitts-km/h.
    Die Nettozeit wird häufig mit der Bewegungszeit gleichgesetzt, wohingegen die Bruttozeit der Gesamt-Recorderzeit entspricht. Der Defaultfaktor lautet Zwei (2), der übrigens auch in vielen (Sport)Auswertungsprogrammen verwendet wird :)
    Je höher der Schwellenwert, desto großzügiger wird die Netto-Durchschnittsgeschwindigkeit berechnet. Bei Laufrunden, bei denen man sich ständig oberhalb des eingestellten Schwellenwertes bewegt (rennt), hat dieser Faktor also keinen Einfluss auf die Nettozeitberechnung, es sei denn, man macht eine kurze Pause oder muss an einer Ampel etwas warten. Bei MTB-Touren, die die eine oder andere Schiebepassage oder Pause aufweisen, wird man hingegen größere Auswirkungen feststellen.

    Bei Verwendung des Werts 0 wird die Brutto-Durchschnittsgeschwindigkeit im statischen Statistikpanel angezeigt, also AV-SPD = Gesamtdistanz / Bruttodauer, anderenfalls gilt NAV-SPD = Gesamtdistanz / (berechnete) Nettodauer.


OSMDroid Einstellungen:

In den OSMDroid Einstellungen gibt es die Option 'Karte skalieren', die mir als erklärungsbedürftig erscheint. Es handelt sich hierbei um eine interne Funktion der OSMDroid Bibliothek, die auf Smartphones sehr sinnvoll sein kann, aber auch einen Nebeneffekt aufweist.

Wenn man diese Option aktiviert, werden die Kartenkacheln zusätzlich skaliert, was auf Smartphones mit einer hohen Auflösung dazu führt, dass man die Labels auf der Karte (Namen der Ortschaften, etc.) besser lesen kann. Nebeneffekt ist der, dass die Karte in manchen Auflösungen etwas verrauscht erscheint. 

Manche User können sich damit nicht anfreunden, im Allgemeinen dient das aber der besseren Lesbarkeit.

Sei's drum, ich will Euch hier keine Vorgaben machen, experimentiert halt selbst etwas mit der Euch sinnvoll erscheinenden Option und behaltet diese dann bei :).


Bekannte Probleme (known issues):

Mitunter kann es selten vorkommen, dass bei einer Neuinstallation die Kartenansicht leer bleibt. In dem Fall bitte die OSMDroid Einstellungen aufrufen und dort das Cache Verzeichnis manuell zuweisen. Ggfs. müsst ihr prüfen, welches der im Auswahldialog angezeigten Cache-Verzeichnisse auf euren Smartphones funktioniert -> Android ist, was die Nutzung externer Verzeichnisse betrifft, mitunter sehr rigide (gerade was neuere Android-Versionen betrifft, sodass es manchmal nötig ist, dieses wichtige Verzeichnis manuell zuzuweisen).

Mitunter kann es bei einer leerbleibenden Kartenansicht (Schluckauf) nötig sein, kurzzeitig eine andere Karte zu wählen und/oder in die Karte zu zoomen, was dann den Download der fehlenden Tiles explizit anstößt. Weshalb das nötig ist, habe ich bisher nicht in Erfahrung bringen können. Im Allgemeinen tritt dieses Phänomen aber eher selten auf und läßt sich mit diesem Trick leicht beseitigen.
Auch kann es einmal vorkommen, dass ein Kartenprovider temporär nicht erreichbar ist oder selbst etwas Schluckauf hat. Darauf hat die App natürlich keinen Einfluß. Da die Karten-Tiles aber intern gecached werden, sind daraus resultierende Probleme eher selten.

Sollten die Kartenansicht weiterhin leerbleiben, dann ist fast immer eine falsche Systemuhrzeit auf eurem Smartphone der Grund. Dies kann bewirken, dass die Karten-Tiles nicht heruntergeladen werden können, weil dann bei HTTPS-Verbindungen die Sicherheitszertifikate nicht funktonieren!

*Abstürze: Wie weiter oben bereits erwähnt, kann es leider immer einmal vorkommen, dass sich eine Importdatei nicht korrekt Parsen läßt und - im Schlechtesten aller Fälle - sogar einen App-Absturz bewirken kann. In der Regel kann ich solche Probleme durch Zusendung einer Datei, die solch einen Absturz verursacht, beheben. Meistens waren korrupte GPX-Dateien Auslöser solcher Abstürze, und auch, wenn ich selbst viele GPX-Dateien in meinem Fundus habe, kenne ich natürlich nicht jedes Detail, das Probleme verursachen kann.
Kurze Rede, langer Sinn: in solchen Fällen bin ich auf Eure Mitarbeit angewiesen, damit ich im Code an entsprechender Stelle einen Safeguard einbauen kann.

Soviel fürs Erste. 

Hier noch das von YouTube (bisher) als nicht jugendfrei eingestufte HowTo-Video, das die App im Einsatz zeigt (ich weiß nicht, ob dieses HowTo-Video in diesem Blogbeitrag überhaupt eingesehen werden kann oder man sich in YouTube einloggen muss, um sich als qualifiziert - sprich 18+ - zu erweisen):



Danke fürs Lesen, eventuell wird dieses Manual noch um den ein oder anderen Punkt ergänzt werden. Das mache ich vom Feedback abhängig. 

PS: Diese App ist frei und soll auch weiterhin frei und vor allem werbefrei bleiben (zumindest was diese Viewer App betrifft). Wenn ihr meine Arbeit aber etwas honorieren wollt, so könnt ihr gerne mal einen der Werbebanner anklicken oder auf meiner Webseite über einen Amazon Link einen Einkauf tätigen. Wie ich oben bereits angemerkt habe, diese Corona-Phase hat vieles in Unordnung gebracht (und auch beruflich hat man als Freelancer schon bessere Zeiten erlebt).

Siehe auch: Unterstützung des TrainingLab Projekts.

Weiterführende Links:

Diese App nutzt diverse Fremdkomponenten (Bibliotheken):


Link zur App im Google Play Store: https://play.google.com/store/apps/details?id=de.wrpsoft.wrpelevationchartmaker

Vorstellung einiger meiner Android Apps auf meiner Webseite: https://www.hrmprofil.de/apps/android/android.html

Blogbeitrag, der erläutert, wie man mit WRPElevationChart externe Apps funktionell erweitern kann:

Danksagungen:

An dieser Stelle noch ein großes Dankeschön an M. Bogacz für die Übersetzung der App ins Polnische.

Wer Lust und Laune verspürt, die App in seine Landessprache zu übersetzen, kann sich gerne mit mir in Verbindung setzen. Da es sich um eine freie App handelt und sich an diesem Status auch nichts ändern wird, kann ich aber solche Arbeiten leider nicht vergüten.


Zur Belohnung gibt's dann wie immer noch etwas gute Mucke:

2 Kommentare:

Anonym hat gesagt…

Coole kleine App. Macht genau was sie soll.
Danke fürs Sharen.

WRPSoft hat gesagt…

Freut mich zu hören :) Eine positive Bewertung im Google Play Store wäre aber fast noch besser, da die Reichweite meines Blogs doch arg begrenzt ist und Apps ziemlich stark von den Bewertungen 'leben'.