GNavigia/Gina
Objekte, Meldungen und Sonderfunktionen
Objekte: Sinn und Gebrauch
Wir haben bisher nur jenen Teil des Programms betrachtet, der die Manipulation und die Visualisierung von Tracks umfasst, wir kommen jetzt zu dem der Objektbildung. Objekte im Sinne dieses Programms sind diejenigen GPS-Elemente, die in der streng hierarchischen Baumstruktur im Reiter Objekte angelegt werden können. Objekte (können) bestehen aus Objekten, Textobjekten, Objektreferenzen und Tracks. Streng hierarchisch bedeutet, dass es nur genau einen obersten Knoten geben kann.
Objekte fassen letztlich Tracks zusammen, die so unter einem anderen Namen präsentiert oder ausgewertet werden können. Ist einem Objekt ein Track oder eine Objektreferenz zugeordnet, kann ihm kein Objekt mehr zugeordnet werden. Tracks und Objektreferenzen bilden somit die Blätter des Baums.
«Wozu braucht man Objekte?», werden Sie fragen. Betrachten wir hierzu einen Anwendungsfall, der auch maßgeblich der Objektentwicklung zugrunde lag, nämlich das Bestimmen der Länge einer Skiabfahrt. Wenn man z. B. in Zermatt von Hohtälli abfährt zum Gant, trifft man nach etwa der halben Strecke auf die Piste «Kelle», die die Abfahrt Gornergrat-Riffelalp einleitet. Für einen Kilometer laufen die Abfahrten zusammen weiter, dann gabeln sie sich zur Riffelalp und zum Gant. Auf der nicht maßstäblichen Skizze ist unschwer zu erkennen, dass hier insgesamt vier Abfahrten (Hohtälli-Gant, Hohtälli-Riffelalp, Gornergrat-Gant und Gornergrat-Riffelalp) beteiligt sind, für die man nur fünf Teilabschnitte, also Tracks, tatsächlich bearbeiten muss.
Würde man die Information durch Kopieren der Teilabschnitte zu jeweils einer Abfahrt zusammenstellen, hätte man zwar nur vier Tracks, aber dafür würde der Mittelteil vier Mal auftreten. Wenn man nach Fertigstellung der Arbeiten einen Fehler in diesem Mittelteil entdeckt, muss man vier Abfahrten berichtigen. Hat man statt dessen vier Objekte erzeugt, die auf die zugehörigen Teilabschnitte verweisen, ändern sich die betroffenen Objekte beim Berichtigen des einen Tracks automatisch.
Objektreferenzen sind, was der Name so schön sprechend sagt, Referenzen auf Objekte. Stellen Sie sich vor, dass unsere Abfahrt Hohtälli-Gant aus den Pisten «White Hare» und «Grünsee» besteht, wobei die «White Hare» bereits zuvor als Objekt aus den Tracks «White Hare I» und «White Hare II», dem Mittelstück, zusammengestellt wurde. Damit können wir ein Objekt «Abfahrt Hohtälli-Gant» bilden mittels einer Objektreferenz «Referenz: White Hare» und dem Track «Piste Grünsee». Hat man die Piste «Grünsee» zuvor bereits als Objekt definiert, stellt man die Abfahrt aus zwei Objektreferenzen zusammen.
Objektreferenzen können auf beliebige Objekte zeigen, die keine Rekursion erzeugen, d. h. dass es keine Objektreferenzen auf direkte Vorfahren in der Objekthierarchie geben kann.
Trackreferenzen können in ihrer Bedeutung Tracks gleichgestellt werden, allerdings kann man den Namen des Tracks für die spezielle Anforderung überschreiben. Hierzu erfolgt eine Abfrage, bevor die Referenz hinzugefügt wird. Insbesondere für Listen von HTML-Ausgaben ist die Umbenennung für die Ausgabe manchmal sinnvoll.
Trackreferenzen entstehen analog zu Objektreferenzen dadurch, dass man aus der Auswahl, die man über die Schaltfläche «Referenz» erreicht, nicht ein Objekt sondern einen Track auswählt. Das setzt voraus, dass der zu referenzierende Track bereits unter einem Objekt eingetragen ist. Track- und Objektreferenzen sind aber auch nur sinnvoll, wenn sie gewöhnliche Auswertungen thematisch «verfeinern», sodass die so genutzen Tracks praktisch immer unter Objekten auftreten sollten. Ist das nicht der Fall, bildet man ein Pro-Forma-Objekt, unter dem alle zu referenzierenden Tracks zusammengefasst sind. Treten Tracks und Objektreferenzen gemischt auf, wird das beim Laden der Datei als Hinweis ausgegeben. Schädlich ist das zwar nicht, aber das Programm mag es nicht, weil nur Referenzen eine saubere und einheitliche Ausgabe als HTML-Datei garantieren.
Objekte verfügen nur über sehr wenige Attribute, namentlich die Aktualität, die darstellungsrelevante Fachbedeutung, die Liste der Fachbedeutungen, die GUID, die Objekt-ID, die Objektlänge und die Vertikaldistanz (Höhenunterschied), sowie Name und Beschreibung. Der Name muss nicht eindeutig sein und kann jederzeit geändert werden.
Objekte sind die Knoten des Baums und ohne Blätter (Tracks oder Objektreferenzen) nicht sinnvoll nutzbar. Tracks unterscheidet man durch die vorangestellte Track-ID, während Objektreferenzen durch die Bezeichnung «Referenz:» eingeleitet werden.
Objekte werden dem Baum hinzugefügt, indem ein Knoten, der «Bezugsknoten», selektiert und die Schaltfläche «Objekt» betätigt wird. Die Schaltfläche ist nur dann sensitiv, wenn der ausgewählte Knoten dies zulässt, d. h. keine Objektreferenzen oder Tracks aufweist. Neue Knoten können gegenüber dem aktuell selektierten Knoten als über-, untergeordnet oder gleichberechtigt eingefügt werden. Da Knoten mittlerweile sehr einfach verschoben werden können und auch Undo/Redo dadurch nicht einfacher wird, wurde die Option «Als neuer Zweig des Baumes ab hier» aufgegeben. Dafür kann ein gleichberechtigter Knoten vor oder nach dem aktuell selektierten Knoten eingefügt werden. «Vergessene» Gliederungsstufen lassen sich so recht einfach einfügen. Der Dialog unterscheidet die Optionen nach ihrer Verfügbarkeit und graut solche aus, die ungültige Kombinationen von Tracks und Objekten ergeben würden.
Der Pfeil kopiert den Text des Bezugsknotens in das Eingabefeld «Knotenname».
Tracks werden zu Objekten hinzugefügt, indem sie aus einem Dialog ausgewählt werden, der nach den gültigen Regeln der Mehrfachselektion arbeitet. Tracks sind letztlich Fleisch und Blut der Objekte, da sie die messbaren Größen (Längen, Höhenunterschiede etc.) realisieren. Wird mehr als ein Track selektiert, so ergibt sich die Gesamtlänge des Objekts, die «Objektlänge», aus der Summe der Einzellängen eben dieser Tracks, gemessen über die nicht gelöschten Trackpunkte derselben in der jeweiligen Kartenprojektion unter Berücksichtigung der Höhenunterschiede. Dass die UTM-Kartenprojektion unter ungünstigen Umständen einen Fehler von 40 Zentimer auf einen Kilometer bedingt, können wir im Rahmen der Messgenauigkeit getrost vernachlässigen.
Wichtiger ist da schon, dass die Tracks, die sich in der Summe möglichst fehlerfrei zu einem Objektmaß ergeben sollen, auch tatsächlich aneinanderstoßen. Um dies zu gewährleisten, sollten die Optionsschaltflächen «Ergebnis nach Lage sortieren» und «Ersetzen statt hinzufügen» angeschaltet sein. Bitte bedenken Sie, dass beim Aufstarten des Dialogs dann und nur dann die zugehörigen Tracks in der Liste selektiert sind, wenn im Objektbaum die Option «selektiert» eingeschaltet ist, da die Liste immer nur die Selektion in der Karte widerspiegelt. Das gilt auch, wenn Tracks ggf. gerade nicht sichtbar sind!
Wenn Sie den Dialog bestätigen, werden die Optionen ausgewertet und die angegebene Differenz dazu benutzt, den Abstand der nach Lage sortierten Tracks zu untersuchen. Wird die maximale Differenz überschritten, erfolgt eine Fehlermeldung und das Ergebnis wird nicht übernommen.
Textobjekte bilden einen Sonderfall des Objekts. Sie tragen allein Textinformationen und können so zur Illustration von Ergebnislisten dienen. Wenn Sie eine Position im Objektbaum ausgewählt haben, erzeugen Sie ein neues Textobjekt durch Betätigen der «Text» Schaltfläche. Im Dialog können Sie die Position festlegen, an der das Textobjekt in den Objektbaum eingetragen werden soll.
Der Textobjektname sollte sprechend sein. Wenn Sie nur wenig Text haben, sollten Sie den Textobjektnamen und den Text identisch halten. Dies erreichen Sie mit den Schaltflächen «Kopieren» sowie «HTML-fett/kursiv/klein», die den Text mit der Kennung für eine entsprechende Formatierung in das Textfeld übernehmen. Die Auflistung «Zermatt an einem Tag» illustriert anschaulich, was die Textobjekte leisten können. Sie dokumenieren die Aufstiegshilfen, die naturgemäß nicht in die Gesamtzahl der Pistenkilometer einfließen dürfen.
Das Ändern der Objekthierarchie geschieht durch «Ziehen und Fallenlassen». Sie können Objekte anfassen und mit gedrückter Maustaste an einen anderen Ort verschieben. Das Programm überprüft, was für ein Knoten aktuell unter der Maus liegt. Besitzt der Knoten bereits Objektreferenzen oder Tracks, so wird das Objekt auf derselben Ebene vor das aktuelle Objekt verschoben. Das Kopieren von Objekten ist nicht möglich.
Sie löschen Objekte mit Hilfe der gleichnamigem Schaltfläche. Dabei können Sie entscheiden, ob die untergeordneten Objekte ebenfalls gelöscht werden sollen, oder ob sie anderen Knoten zugeordnet werden, was Sie vor allem dann nutzen werden, wenn Sie versehentlich eine Hierarchiestufe zuviel gebildet haben. In diesem Fall weisen Sie die Kindknoten dem übergeordneten Objekt zu. Dieses darf aber dann keine weiteren Objektknoten besitzen.
Der Dialog unterscheidet die Optionen nach ihrer Verfügbarkeit und graut solche aus, die ungültige Kombinationen von Tracks und Objekten ergeben würden.
Dabei kann es zu der Situation kommen, dass «alle löschen» die einzige verbleibende Möglichkeit ist. Auch auf diesen Sachverhalt werden Sie per Dialog hingewiesen, da Sie die Aktion immer noch abbrechen können. Nur in diesem einen Fall ist die erste Option bereits ausgewählt. In allen anderen Fällen wird bei einer ungültigen Auswahl die Schaltfläche OK ausgegraut.
Objektfachbedeutungen bestimmen
Fachbedeutungen für Objekte lassen sich manuell vergeben oder anhand derjenigen der zugehörigen Tracks bestimmen. Hat man Tracks bereits mit Fachbedeutungen attributiert, kann GNavigia den Übertrag auf die Objekte vornehmen. Die Steuerung ist, wie man sich leicht vorstellen kann, wegen der Vielzahl der Bedingungen entsprechend undurchsichtig - und zurzeit auch noch nicht vollständig implementiert. Drei Parametergruppen bestimmen das Ergebnis der Berechnung, wobei die dritte Gruppe zurzeit allein hinsichtlich der Festlegung «nur wenn eindeutig» implementiert ist.
- Zu bearbeitende Objekte: Die Bestimmung der Objektfachbedeutungen kann über den gesamten Baum vorgenommen werden oder ab dem selektierten Knoten, dessen aktueller Pfad angegeben wird. Interessanter ist aber die Frage, was mit den Objektreferenzen geschehen soll, die selbst keine Fachbedeutung tragen sondern nur auf Objekte verweisen. Wird die Option zur Anwendung der Ergebnisse auf referenzierte Objekte eingeschaltet, werden auch die referenzierten Objekte bearbeitet.
- Wenn bereits eine Fachbedeutung existiert, kann festgelegt werden, wie mit der neu ermittelten Fachbedeutung verfahren werden soll. Dabei bedeutet «untergeordnet hinzufügen», dass die Fachbedeutung an die Liste der Fachbedeutungen angehängt wird und damit die Darstellung des Objekts nicht verändert, während «übergeordnet hinzufügen» besagt, dass die Fachbedeutung an den Anfang der Liste rückt und damit die Darstellung des Objekts bestimmt.
- Neue Fachbedeutungen werden nur dann in die Ergebnisse eingestellt, wenn sie der gewählten Bedingung gehorchen. Besteht ein Objekt aus mehreren Fachbedeutungen, so ist eine Zuordnung nicht eindeutig. Dabei kann die Frage, welche Fachbedeutung für das Objekt relevant ist, nicht ohne Kenntnis der Gesamtsituation entschieden werden. Nehmen wir wieder unser Beispiel mit den Skipisten: Eine Piste möge sich aus mehreren Tracks zusammensetzen, wovon 5% der Gesamtstrecke eine mörderische Buckelpiste ist und 95% flach wie die norddeutsche Tiefebene. Sie werden dieses Objekt doch nicht allen Ernstes als «besonders einfache Piste» markieren wollen, oder?
Objektfachbedeutungen löschen
Objektfachbedeutungen werden, wie andere Fachbedeutungen auch, nicht pauschal gelöscht, sondern müssen mit der Auswahl aus der Liste der Fachbedeutungen übereinstimmen, da immer nur die angegebene Fachbedeutung aus der Liste der dem Objekt zugeordneten Fachbedeutungen entfernt wird.
Kontextmenü des Objektbaums
Das Kontextmenü des Objektbaums erlaubt die Selektion des übergeordneten Objekts zur schnellen Übersicht über die Daten der berechneten Werte, namentlich die Gesamtlänge. Ist durch Änderungen an Tracks die Reihenfolge durcheinander geraten, können die Tracks hier neu sortiert werden.
Insbesondere für die Ausgabe von Objekten in Listenform müssen ggf. einzelne Tracks unter einem zugehörigen Objekt zusammengefasst werden, was auch für die nachfolgend beschriebene Strukturprüfung der Objekte wichtig werden kann.
Haben Sie nun mehrere Tracks unter einem Objekt gruppiert, ist es mühsam, für diese einzelne Objekte zu bilden und die Tracks danach zu selektieren und zuzuordnen. Dies erledigt der Kontextmenüpunkt «Erzeuge Objekte aus Tracks». Die Funktion sammelt die Tracks, trennt sie vom Objektbaum und erzeugt für jeden Track ein Objekt, das sie in der gegebenen Reihenfolge in den Baum einhängt und mit dem Track versieht. Nicht übertragen wird die Fachbedeutung des Tracks. Die Objektfachbedeutung muss zurzeit noch «von Hand» nachgetragen werden.
Wenn Sie Listen erzeugen wollen, die keine doppelten Einträge enthaten dürfen, hilft die Funktion zur Strukturprüfung der Objekte. Sie ermittelt zugleich gelöschte und unsichtbare Tracks in der Liste sowie fehlende Objektfachbedeutungen für ein zuvor ausgewähltes Startobjekt. Alle Prüfungen können auch einzeln durchgeführt werden.