GNavigia/Gina
Autokart Skitag: Eine Skiline-Simulation
Hinweis: Die Funktionalität Autokart Ski muss zunächst im Menü Extras/Einstellungen im Reiter Auswertungen zugeschaltet werden. Zudem sollten Sie zur Beurteilung der Tracks immer mindestens das Höhenprofil sichtbar geschaltet haben. Sie sollten das Fadenkreuz und das Maßstabslineal sehen können, da später optional auf den Mittelpunkt der Darstellung zentriert werden kann, was bei der Ansichtsart «Gitterlinien» nicht optimal ist und leicht zu Punktverwechslungen führen kann.
Die wünschenswerte Erweiterung für die Funktionalität «Autokart Ski» wäre die komplette Auswertung eines GPS-Tracks ohne eine weitere Aktion des Benutzers. Warum das nicht zu 100% unsetzbar ist, wird im Laufe dieser Geschichte beschrieben. Immerhin ist bereits ein Modul umgesetzt, das dies realisiert, sofern die Messfehler moderat sind und die «Wege» bekannt sind.
Die hierzu notwendigen Befehle sind unter dem Menüpunkt «Skitage analysieren» zusammengefasst:
- Einen «Skitag als Objekt zusammenstellen» wurde zurückgestellt. Dazu benötigt man die nachfolgenden Spiegelstriche.
- Um «Wege aus Objekten» zu erzeugen, muss man zuvor Objekte gebildet haben. Sind Lifte als Objektliste vorhanden, erzeugt die Funktionalität Wegpunkte einer bestimmten Fachbedeutung am Anfangs- und Endpunkt der Beförderungsanlagen.
- Die Analyse von Tracks erfordert Regeldaten, die auf den im Projekt erstellten Wegen fußen, und, für die Skiline-konforme Auswertung, Skipassnummern, die in einem eigenen Modul verwaltet werden.
- Die Funktionalität «Skiline simulieren aus SKIDATA-Textauszügen» ist eine für Zermatt spezifische Funktionalität, die nur für Anwender zur Verfügung steht, die die Originaldaten aus der Registrierungsdatenbank der Zermatt Bergbahnen AG (ZBAG) auswerten möchten. Diese Daten stehen aber nur einem ausgewählten Personenkreis für interne Zwecke, zur Vermissten- und zur Fehlersuche zur Verfügung.
Skiline simulieren aus GPS-Messungen
Obgleich die Ergebnisse am Ende genauso präsentiert werden können, wie es im Abschnitt über die Simulation aus SKIDATA-Textauszügen beschrieben steht, ist der Weg dorthin an die Besonderheiten der GPS-Messungen gebunden, die oft wüste Kurven liefern, insbesondere wenn man in einer Luftseilbahn in der Mitte eingezwängt ist. Zudem muss man zusammengesetzte Wege, z. B. die Gornergratbahn oder die Kumme Gondelbahn, Abschnitt für Abschnitt verfolgen.
Um den Aufwand der Programmierung gering zu halten, wurden folgende Funktionalitäten kombiniert:
- Ein Track kann als Profil dargestellt werden. Er umfasst idealer Weise einen ganzen Skitag.
- Wegpunkte werden, abhängig von ihrem Abstand zum Profil und ihrer Fachbedeutung, in das Profil eingetragen.
- Die Reihenfolge der Wegpunkte im Profil wird mit der Festlegung der Wege abgeglichen.
- Die Wege müssen eine unterbrechungsfreie Liste bilden. Bricht die Folge ab, erfolgt ein Hinweis und die Berechnung stoppt.
- Aus Aufzeichnungsdatum und GPS-Empfänger wird das Skigebiet und die Skipassnummer ermittelt. Dazu dient der Menüpunkt «Skipassnummern verwalten».
Skipassnummern verwalten
Skipassnummern können dann und nur dann in den Dialogen angezeigt werden, wenn sie in der Verwaltung der Skipassnummern eingetragen sind. Der hierzu notwendige Dialog erfordert die Festlegung des gewünschten GPS-Empfängers in der Verwaltung der GPS-Empfänger.
Um einen neuen GPS-Empfänger hinzuzufügen oder einen neuen Namen für den Reiter auszuwählen, muss die Schaltfläche «GPS-Empfänger» betätigt werden. Bei beiden Aktionen wird zunächst geprüft, ob der Name bereits in der Liste der Reiter vertreten ist. Ist das der Fall, erscheint ein Hinweis und der Reiter wird in den Vordergrund beordert. Das Löschen eines Reiters wird von einer Sicherheitsabfrage begleitet. Die Daten werden benutzerbezogen in folgender Datei abgelegt:
%AppData%\GNavigia\Settings\Skipassnummern.xml
Track oder Objekt analysieren
Die Analyse eines Tracks beginnt mit der Auswahl. Ist kein Track ausgewählt, werden alle im Projekt vorhandenen Tracks nacheinander bearbeitet. Die mehrfache Bearbeitung erfordert eine Bestätigung. Die Berechnung beginnt mit der Anzeige der Profildarstellung, die zuvor konfiguriert werden muss. Dazu sollten nur die Höhen «nach Entfernung» angezeigt und die «Höhenskala aus Extremwerten» berechnet werden. Die Wegpunkte im Profil werden nach folgender Grafik konfiguriert:
Die Wegpunkte, die im Profil erscheinen, können nicht anhand der Profilgrafik überprüft werden, da einige wegen des geringen Abstands nicht dargestellt werden. Zur Beurteilung kann man entweder das Vergrößerungsfenster hinzuschalten oder die Wegpunkte als Datei speichern unter «Extras/Wegpunkte im Profil exportieren».
Im Beispiel wurden den Fachbedeutungen «Liftstation, Tal», «Mitte» und «Berg» (Gebäude) die blaue Farbe zugeordnet und dem «Orientierungspunkt» die hellblaue. Entsprechend stellen die blauen und hellblauen Linien Wege dar. Die Farben der Linien sind nicht konfigurierbar. Die Auswahl und Zuordnung der Symbole ist unter Darstellung der Wegpunkte beschrieben, die Anzeige der Fangkreise ist an «Bearbeiten/Textpositionen ändern» gebunden, der Radius wird als Attribut des Wegpunkts eingestellt.
Betrachten wir die Schritte bis hierher am Beispeil von Zermatt.
Der allererste Schritt ist das Anlegen einer Baumstruktur im Reiter «Wege». Sie sollten eine Struktur in der Art anlegen, wie im Bild gezeigt: Es darf nur einen obersten Knoten geben, dem Sie den Namen des Skigebiets geben, hier «Zermatt». Darunter sollten Sie die Gliederungsstufen «Aufstiegshilfen» und «Abfahrten» anlegen, was die spätere Fehlersuche vereinfacht. Geben Sie diesen Stufen bereits die Typen «Lift» und «Abfahrt» mit, da sie an alle untergeordneten Wege vererbt werden. Sie können eine weitere Untergliederung vorsehen, hier «Schweiz» und «Italien», aber das Programm kann damit für den Folgeschritt nichts anfangen.
Wenn Sie in früheren Projekten bereits eine Trennung von Liften und Pisten vorgenommen haben und diese unter verschiedenen Objekten abgelegt haben, können Sie für die Lifte «Wege aus Objekten erzeugen». Das Ergebnis können Sie exportieren und in einem anderen Projekt hinzuladen. Wenn nicht, überspringen Sie die folgenden Ausführungen.
Der Dialog «Wege automatisch erzeugen» erfasst diejenigen Fachbedeutungen, die Aufstiegshilfen zugeordnet werden. Die Schaltfläche «Hinzufügen» öffnet den Dialog zur Auswahl von Fachbedeutungen. Wenn Sie darin eine Fachbedeutung auswählen und doppelklicken, wird diese in den Dialog übernommen, ohne dass Sie die Auswahl schließen müssen. Das beschleunigt die Auswahl einer großen Liste erheblich.
Als Fachbedeutungen der Liftstationen war zunächst eine Diversifizierung nach Tal-, Mittel- und Bergstation vorgesehen, aber es kann auch für alle drei Positionen der Wert 2189 («Liftstation») eingetragen werden. Zudem bedarf es der Angabe eines Knotens, unter dem die Ergebnisse eingetragen werden, daher die Notwendigkeit, zuvor eine Baumstruktur anzulegen.
Aus den Objekten ergeben sich zumeist bereits die Bezeichnungen für die Lifte. Wenn allerdings noch Rohbezeichnungen vorliegen, die sich aus dem originalen Tracknamen ergeben, kann es sein, dass man diese von den Vorschlägen ausnehmen will. Solche Namensteile kann man ausschließen.
Schalten Sie für die folgenden Aktionen die auswählbaren Objektarten auf «Wegpunkte»!
Orientierungspunkte sind Wegpunkte mit der Fachbedeutung 9009, die wie jeder andere Wegpunkt neu angelegt werden, mit dem Unterschied, dass sie nicht mit einem Trackpunkt verbunden werden sollten. Die Erzeugung erfolgt «an digitalisiertem Ort».
Der Dialog, der das Anlegen neuer Wegpunkte begleitet, ist für die schnelle Erzeugung von Orientierungspunkten erweitert worden. Da die Profilabstände dieser Punktart oft gering sind, steht eine zweite, kleine Skala zur Verfügung. Zudem merkt sich der Dialog die zuletzt gewählte Fachbedeutung, die man durch Anhaken einer Optionsschaltfläche übernehmen kann. Erforderlich ist dann nur noch die Angabe eines Namens, das Klicken an die gewünschte Position und die Auswahl des Profilabstands.
(1) Beim Anlegen des ersten Wegs erhalten Sie den Namensvorschlag «Projekt», den Sie mit «Zermatt» überschreiben. Dieser Weg ist neutral und erhält keine Typangabe. Legen Sie darunter die untergeordneten Knoten «Aufstiegshilfen» (Typ «Lift») und «Abfahrten» (Typ «Abfahrt») an! Achten Sie beim Typ auf die Schreibweise!
(2) Für den Umgang mit den Wegpunkten der Beförderungsanlagen ist es unerheblich, ob sie automatisiert oder «von Hand» erzeugt wurden. Erzeugen Sie zunächst unterhalb von Aufstiegshilfen einen neuen Weg, dem Sie den Namen «Zermatt-Furi» geben! Der Weg sollte den Typ «Lift» vom übergeordneten Knoten geerbt haben. Die Fachbedeutung stellen Sie von Hand über den Menüpunkt «Bearbeiten/Fachbedeutung festlegen» ein.
(3) Diesem Weg weisen Sie in der Reihenfolge «MHE Zermatt Tal» und «Furi» zwei Wegpunkte zu. Später werden Sie einen Weg für die Talfahrt mit der Bahn brauchen, der «Furi-Zermatt» heißen wird und dieselben Wegpunkte in umgekehrter Reihenfolge enthält. Hierfür gibt es eine eigene Fachbedeutung, «3165 - Talfahrt mit Bahn».
(4) Nehmen wir an, dass innerhalb des Fangradius an der Station Aroleid aus früheren Kartierungen bereits ein Netzpunkt 3. Ordnung liegt, der aufgrund des Maßstabs nicht angezeigt wird. Wenn dieser beim Anklicken in die Liste der Wegpunkte für «Furi-Aroleid» übernommen wird, wird es später zu einem Problem kommen, weil die Namen der Wegpunkte eines Weges eindeutig sein müssen.
Die Strukturprüfung der Wege, beginnend mit «Zermatt», fördert folgerichtig zwei Meldungen zu Tage, die eine Fehlersuche vereinfachen:
Löschen Sie den Netzpunkt 3. Ordnung aus dem Baum.
(5) Um zu verstehen, wie GNavigia die Reihenfolge der Wegpunkte im Profil in die Abschnitte eines Skitags zerlegt, schauen wir uns den Abschnitt «Schwarzsee-Furgg» genauer an. Ganz offensichtlich kann man auf der Liftfahrt nach Trockener Steg an Schwarzsee in der Bahn sitzen bleiben, was fast alle Gäste tun, oder man kann aussteigen, die Piste «Skiweg» nehmen und an Furgg wieder einsteigen. Sich sputende Fahrer erreichen die Gondel, aus der sie ausgestiegen sind.
Bereits die erste Erfahrung mit der Festlegung von Orientierungspunkten (OP) hat gezeigt, dass man grundsätzlich Kreuzungen oder Abzweigungen wählt. Ich werde diese Punkte als «wesentliche» Orientierungspunkte bezeichnen. Zusätzlich kann man Zwischenpunkte (ZP) festlegen, also Orientierungspunkte ohne Kreuzungs- oder Abzweigungscharakter, die dann zu einem wesentlichen OP werden, wenn sich zwei Pistenteile nach einer Trennung wieder treffen und unterschieden werden sollen, z. B. weil deren Längen stark differieren.
Aus jahrzehntelanger Erfahrung mit dem schweizer Teilskigebiet wissen wir, dass auf dem Weg von Schwarzsee nach Furgg die Piste «Aroleid» abzweigt. An dieser Abzweigung setzen wir den ersten OP. Zudem setzen wir noch einen ZP auf dem Skiweg, und zwar dort, wo er nach menschlichem Ermessen niemals von einem Track geschnitten wird, der bei der Talfahrt mit der Gondel aufgezeichnet wird.
Mit den hier angelegten Wegpunkten ergibt sich folgende Profildarstellung (Vergrößerungsfaktor 10 am Anfang des Profils):
(6) Für die lückenlose Aneinanderreihung von Wegen ist die Festlegung von Abfahrten unerlässlich. Wir wenden uns dem Knoten «Abfahrten» zu und legen die Wege «Schwarzsee-Aroleid», «Aroleid-Furgg» und «Aroleid-Untere Aroleid» an. Letzterer ist für die Beurteilung von «Schwarzsee-Furgg» unerheblich, zeigt aber die Intention, die zum OP «Aroleid» auf dieser Piste geführt hatte.
In der Grafik ist der Weg «Aroleid-Furgg» mit dem ZP «Skiweg» selektiert. Der ZP visualisiert den langen Bogen, der hier zu fahren ist, hat aber nichts mit der Länge des Pistenabschnitts zu tun, dessen aufwändige Berechnung auf der Seite über die Wege beschrieben ist.
Die Auswertung geht die Wegpunkte im Profil durch. Nehmen wir an, dass beim Start am Matterhorn-Express die Talstation den Index 0 hat, weil alle modernen Programmiersprachen mit 0 zu zählen beginnen, Furi den Index 1 und Aroleid den Index 2, so erscheint Schwarzsee mit Index 3 in der Liste. Damit füllt sich die Liste der Wege mit «Zermatt-Furi», «Furi-Aroleid» und «Aroleid-Schwarzsee». An Schwsarzsee beginnen nun zwei Wege, einmal die Talfahrt mit der Bahn und der Skiweg. GNavigia erkennt das und hält zwei Stränge vor, «Schwarzsee-Furgg» und «Schwarzsee-Aroleid». Mit Index 4 erscheint OP «Aroleid», womit der Weg «Schwarzsee-Aroleid» komplett ist. Mit diesem OP beginnt zugleich der Weg «Aroleid-Furgg». Mit Index 5 wird der «ZP Skiweg» diesem Weg zugeordnet.
Index 6 ist die Station «Furgg». Dieser Wegpunkt schließt sowohl «Schwarzsee-Furgg» als auch «Aroleid-Furgg» ab, die beiden Stränge kommen wieder zusammen. Sie werden sodann auf Nähe geprüft:
- Für die Abfahrt werden die beiden Wege betrachtet, für deren Wegpunkte die Indices gespeichert wurden. Die Differenz 4 minus 3 ergibt 1, was bedeutet, dass die Punkte unmittelbar aufeinander folgen. Für den zweiten Teil ergibt sich 6 minus 5 plus 5 minus 4 gleich 2, was bei drei Punkten und zwei möglichen Differenzen bedeutet, dass auch hier die Punkte unmittelbar aufeinander folgen.
- Für die Talfahrt mit der Bahn wird 6 minus 3 gleich 3 ermittelt, was bei nur einer Differenz bedeutet, dass eine Lücke von 2 in den Daten klafft.
Die Liste der ermittelten Wege wird letztlich um die beiden Wege «Schwarzsee-Aroleid» und «Aroleid-Furgg» ergänzt.
Der Wert des ZPs ist größer als die Visualisierung des weit ausholenden Bogens der Piste. Würde er nicht angelegt, könnte es dazu kommen, dass ein schlechter Empfang bei der Talfahrt mit der Bahn den OP «Aroleid» erfasst. Dann würde die Piste mit zwei vollständigen Wegen (ohne Lücken) Vorrang vor der Talfahrt mit der Bahn erhalten, was nicht den Tatsachen entspricht. Je nach Lage eines OPs kann man auch nicht einfach den Profilabstand verringern, um eine solche Situation zu vermeiden. Manche Abzweigungen liegen direkt unter einer Liftspur.
Hinweis: Profilabstände müssen so definiert werden, dass der Track diese auch dann schneidet, wenn die Linien wegen schlechten Empfangs weit ausufern. Während die Mittelstation einer Gondel einen großen Abstand definieren sollte, liefern Pisten, sofern sie nicht in engen Tälern oder durch Wald verlaufen, recht genaue Tracks.
Hinweis: Fangkreise dürfen sich niemals schneiden: Fällt ein Trackpunkt in zwei sich überschneidende Kreise, bricht die Auswertung mit dem Fehler ab, dass ein Weg nicht zugeordnet werden kann.
Zuletzt schauen wir uns das Ergebnis im Zusammenhang einer Auswertung an. Darin wird der Weg «Schwarzsee-Aroleid» als «Skiweg 1» und «Aroleid-Furgg» als «Skiweg 2» bezeichnet:
Klickt man auf die Schaltfläche «Simuliere Skiline», erhält man die typischen Skiline-Dialoge, wie sie im folgenden Abschnitt näher beschrieben sind.
Skiline simulieren aus SKIDATA-Textauszügen
Als Opfer von eklatanten Fehlern in der Skiline-Auswertung für Zermatt hatten mir die ZBAG Originaldaten der Registrierungsdatenbank (SKIDATA) zur Verfügung gestellt, für die ich einen Algorithmus zur Auswertung der Höhenmeter implementiert habe. Diese Daten, so wurde mir beteuert, seien die, die an Skiline zur Auswertung übermittelt würden. Zusammen mit den Skipassdaten meiner Frau konnte ich zahlreiche Besonderheiten untersuchen.
Wer verstehen will, was die Implementierung bewirken und welche Fehler sie berichtigen soll, muss die ausführliche Beschreibung hierzu lesen: Zermatt/Skiline Fehlerliste, insbesondere die Nummern 4, 8 und 11.
Auch wenn die Fehler selbst von Skiline bisher nicht berichtigt wurden, konnte ich doch zeigen, dass die Eintragungen in der SKIDATA-Datenbank bis auf einen «für Software typischen» Fehler nach der Bahnfahrt Furgg-Schwarzsee mit meinen mittels GPS aufgezeichneten Daten übereinstimmten. Da es die ZBAG nicht interessiert, ob man einen Lift bergauf oder bergab gefahren ist, sind die Vorzeichen aller Fahrten positiv, was man natürlich nicht sehen will, wenn man die «gefahrenen» Höhenmeter wissen will.
Die Intention hinter der Entwicklung des Moduls war die Herstellung der Vergleichbarkeit der grafischen Ausgabe mit den Ergebnissen der Skiline App. Der aufmerksame Beobachter stellt sofort fest, dass die Titelzeile aus einem Desktop-Programm stammt und nicht aus einer App, und auch die Fonts unterscheiden sich deutlich. Zudem habe ich die Höhenunterschiede neben die Bergfahrt geschrieben, was die Fehlersuche erheblich vereinfacht.
Auf die Berechnung der Pistenkilometer habe ich verzichtet, weil das, wenn man Skiline simulieren will, relativ aufwändig ist, zumal die Fehler fast immer im Verantwortungsbereich der ZBAG liegen, die jahrelang am Gornergrat Pistenkilometer zusammenlügt, dass sich die Balken biegen, erstaunlicher Weise aber auch nur dort.
Um die Daten aus der SKIDATA-Datenbank nutzen zu können, sind drei Dateien erfoderlich.
Die interne Darstellung der ZBAG ist ein Datenbankschema, aus dem Auszüge erstellt werden müssen. Dazu gibt es eine standardisierte Vorgehensweise, die einen PDF-Auszug für jeden angeforderten Tag liefert.
[[Headline: Zermatt - Matterhorn ski paradise]] [[Skipass: 1-1280-9-38...]] M Zermatt Eintritt 'ME' 22.04.2019 09:37 1 1295 AS 4 M SS - Tr. Steg M Tr. Steg Austritt 'ME' Matterhorn_glacier_paradise 22.04.2019 10:07 1 M AS 1 Furggsattel M SB Furgsattel 'V' Matterhorn_glacier_paradise 22.04.2019 10:23 1 456 M AS 4 Furggsattel M SB Furgsattel 'V' Matterhorn_glacier_paradise 22.04.2019 10:46 1 456
Die PDF Datei ist nicht maschinenlesbar und muss zuvor in eine Textdatei ungewandelt werden. Da die Positionierung der Tabelle nicht über Tabulatoren sondern absolut geschieht, vermischen sich längere Ausgabetexte, die vorab entzerrt werden müssen. Zudem ist der Apostroph nicht das EDV-bevorzugte Trennzeichen für 1000er-Stellen und beim ersten Gebrauch des Skipasses wird eine zusätzliche Zahl in die erste Zeile eingefügt, die von Hand entfernt werden muss.
Da Skiline und die ZBAG verschiedene Bezeichnungen für die Beförderungsanlagen wählen, muss eine Übersetzungsdatei oder auch «Liftbeschreibungsdatei» erstellt werden, in die man zweckmäßig zugleich die Höhenunterschiede einträgt, die sich aus den Auszügen ergeben.
Damit die Ausgabe der Skiline App möglichst nahe kommt, erweitere ich die Datei um Zeilen mit Überschrift und Skipassnummer, die zugleich die einzelnen Skitage voneinander trennen. Die Übertragung der Daten vom PDF-Dokument in die Eingabedatei ist ebenso fehleranfällig wie die Führung der Übersetzungs- oder Liftbeschreibungsdatei. Das Programm warnt, wenn ein Liftname nicht übersetzt werden kann.
Die zur Auswertung notwendigen Fallunterscheidungen sind übersichtlich und kein Hexenwerk. Anders als bei der Berechnung aus GPS gibt es nur sehr selten Messfehler, die dann entweder als Verwechslung der Ausstiege oder als fehlende Einträge in der SKIDATA-Datenbank daherkommen.
Das Beispiel für den gemütlichen Skitag am 11. April mit 15.000 Höhenmetern zeigt bereits zwei von GNavigia korrekt berechnete, von Skiline aber falsch ermittelte Höhenunterschiede, den Einstieg an der Mittelstation der Kumme Gondelbahn (9:53) und den Ausstieg dort wenig später (Einstieg Talstation 10:21).
Lassen sich die Höhenmeter annahmefrei berechnen, kann man die Liftkilometer allenfalls schätzen, eigenen Vermessungen entnehmen oder bei einer Seilbahndatenbank im Netz erfragen. Nicht alle Bahnen sind dort mit allen technischen Daten aufgeführt, sodass diese Zahl von offiziellen Zahlen abweichen wird.