GNavigia

Für Fortgeschrittene


Der Abschnitt «GNavigia für Fortgeschrittene» beschäftigt sich mit folgenden Themen:

Festlegen neuer Fachbedeutungen

Neue Fachbedeutungen werden in der Datei «GpsCodedValueDefinitions.xml» eingetragen, die zurzeit nur die übergeordneten Elemente «Ortsbezeichnung» und «Fachbedeutung» und folgenden Aufbau hat:
<?xml version='1.0' encoding='ISO-8859-1'?>
<CodedValueDomains>
<Ortsbezeichnung>
<Gruppe Name="Land">
<row Code= "D" Name="Deutschland"/>
...
</Gruppe>
<Gruppe Name="D">
<row Code="53000" Name="Bonn"/>
<row Code="R1000" Name="Rheintal"/>
...
</Gruppe>
...
</Ortsbezeichnung>
<Fachbedeutung>
<Gruppe Name="Verkehrswege">
<row Code="1001" Name="Straße"/>
<row Code="1010" Name="Autobahn"/>
...
</Gruppe>
<Gruppe Name="Sieglungsflächen">
<row Code="2000" Name="Siedlungsfläche allgemein"/>
<row Code="2010" Name="Weiler"/>
<row Code="2011" Name="Markt"/>
<row Code="2015" Name="Ortschaft"/>
...
</Gruppe>
<Gruppe Name="Skigebiete">
<row Code="3001" Name="Skigebiet"/>
<row Code="3100" Name="Skipiste"/>
...
</Gruppe>
<Gruppe Name="Radfahren">
<row Code="5100" Name="Radtour"/>
<row Code="5110" Name="Ausflugsfahrt"/>
...
</Gruppe>
<Gruppe Name="Sonderfälle">
<row Code="9100" Name="Epoche allgemein"/>
<row Code="9101" Name="Epoche 1"/>
<row Code="9102" Name="Epoche 2"/>
...
</Gruppe>
</Fachbedeutung>
</CodedValueDomains>

Die Ortsbezeichnung wird von GNavigia zurzeit nicht ausgewertet. Sie ist gedacht zur einheitlichen räumlichen Gliederung und sollte sich hinsichtlich der Orte und Städte im Code an den Postleitzahlen orientieren. Allerdings ist der Code kein ganzahliger Wert sondern eine Zeichenkette, sodass für Regionen der Kennung ein Buchstabe vorangestellt ist.
Die Liste der Fachbedeutungen ist im Rahmen der aktuellen Entwicklung bereits insoweit definiert, als die Gruppen «Verkehrswege», «Siedlungsflächen», «Skigebiete», «Radtouren» und «Sonderfälle» Als erforderlich identifiziert wurden. Fachbedeutungen werden ggf. in Kombination zugeordnet, wobei die Liste insoweit eine Hierarchie darstellt, als die erste Fachbedeutung der Liste zur Darstellung in der Grafik und im KML-Export zum Zuge kommt.
Änderungen an der Datei sollten sorgsam vorgenommen werden, da das Überschreiben bereits definierter Fachbedeutungen die ausgelieferten Beispieldateien «in einem ganz neuen Licht» erscheinen lassen könnte.

Struktur der GTD-Datei

Die Datendatei, die GNavigia beim Speichern schreibt, besitzt eine wesentlich kompliziertere Struktur als die Datei der Fachbedeutungen. Allerdings müssen Sie diese Struktur dann und nur dann kennen, wenn Sie einen Datentransfer programmieren, wie er zum Beispiel bei der Implementierung einer Datenbankschnittstelle unerlässlich ist. Um die einzelnen Parameter und Werte zu erforschen, empfehle ich Ihnen, GNavigia mit der Kommandozeilenoption
  -guid
zu starten, damit die Position der GUID in der Datei zum Ausdruck kommt, wie in der Dokumentation der Datenbankschnittstelle beschrieben. Sie werden die GUID brauchen, um die datenbankeigene ID durch das Programm zu schleusen. Bedenken Sie: Wenn Sie eine GUID angeben, wird diese automatisch ausgegeben, wenn Sie die Daten als Datei speichern. Den o. a. Schalter brauchen Sie nur, um die Position der GUID zu erforschen, wenn Sie zu Testzwecken Daten ohne GUID bereithalten. GNavigia selbst käme nicht auf die Idee, eine GUID zu erzeugen oder eine existierende zu überschreiben. Neu erzeugte Elemente erkennen Sie also später daran, dass sie keine GUID besitzen.

Eine Änderungskennung namens «Status» gibt es übrigens auch, sie wird zurzeit aber nicht gepflegt. Wenn Sie ermitteln wollen, ob sich Elemente geändert haben, müssen Sie zurzeit alle Elemente, die wieder gespeichert werden sollen, mit den selbst gemerkten Ausgangsdaten vergleichen.

Grundlegende Struktur ohne eingeschlossene Elemente

Die Datei beginnt mit der XML-Kennung, Version und Kodierung. Der Stammknoten trägt die Bezeichnung «GPSTrackEditor»:
<?xml version="1.0" encoding="ISO-8859-1"?>
<GNavigia application="GNavigia ...">

XML-Elemente, die sich zwischen den Markierungen
  <Database>
</Database>
befinden, werden vom Programm als Ganzes gelesen, aber nicht interpretiert. Beim Ausgeben der Daten als Datei oder beim Zurückschreiben in die Datenbank wird dieses Tag wieder ausgegeben.
   Der Abschnitt Styles trägt die Ausgabe- und Visualisierungseinstellungen. In der Regel ist einem Layout auch ein Schema zugeordnet, doch ist die Zuordnung frei vergebbar. Das Layout entspricht einem Ausgabeziel, also in der aktuellen Implementierung dem Bildschirm und Google EarthTM-KML, weshalb es meist zwei Layoutdefinitionen gibt. Dagegen ist es durchaus denkbar, dass Sie verschiedene Schemadefinitionen angeben, die Sie bei Bedarf einem Layout zuordnen.
  <Styles>
<Schema name="Bildschirmdarstellung">
</Schema>
<Schema name="KML-Export">
</Schema>
<Layout name="Bildschirmdarstellung">
</Layout>
<Layout name="KML-Export">
</Layout>
</Styles>
Wenn Sie eine GTD-Datenstruktur schreiben, lassen Sie das nachfolgende Element aus. Es wird beim Laden der Daten berechnet, wodurch sichergestellt ist, dass alle verfügbaren Daten sichtbar sind:
  <Mapping>
</Mapping>
Der Bereich der Settings beschreibt die Displayparameter, insbesondere das zugeordnete Layout, die Maskierung von Text, auch als «Halo» bezeichnet, die Anzeigeoptionen für Weg- und Trackpunkte und die Darstellung der Höhenangaben, den Selektionsmodus, sowie Angaben zum Hintergrundserver sowie zur Anzeige gelöschter Daten.
  <Settings>
</Settings>
Die KML-Export Sektion dient der Festlegung des Layouts, das für den Export benutzt wird. Abgelegt wird nur der Name.
  <KML-Export>
</KML-Export>
Liste der Wegpunkte mit den Eigenschaften ID, Länge, Breite, Höhe, Name, Kommentar, Beschreibung und Symbolkennung, sowie Liste der Fachbedeutungen und Datumsstempel (meist leer) und den Angaben, ob selektiert, gelöscht und ob Haupt- oder Nebenwegpunkt:
  <Waypoints>
<wpt id="1" l="7.747704573" b="45.890034987" h="1618.733154">
</wpt>
</Waypoints>
Liste der Tracks mit den Eigenschaften ID, Name, Datumsstempel, Liste der Fachbedeutungen, Referenzen der Wegpunkte am Anfang und Ende (zurzeit nicht ausgewertet), den Angaben, ob selektiert, gelöscht, sichtbar und den zurzeit nicht ausgewerteten und durch das Layout abgedeckten Eigenschaften Farbe und Linientyp.
Zwischen Start- und Endtag erscheinen die zugehörigen Trackpunkte mit den Eigenschaften ID, Länge, Breite, Höhe, Track-ID, Name, Datumsstempel und den Angaben, ob selektiert und/oder gelöscht.
  <Tracks>
<trk id="477" nam="09-APR-06" dtm="2006-04-18T18:47:44Z">
<trkpt id="478" l="7.747743130" b="46.016814709" h="1609.864746">
</trkpt>
</trk>
</Tracks>
Das Erzeugen der Objektstruktur dürfte Ihnen die meiste Arbeit machen, was Sie folglich vermeiden sollten. Legen Sie Objekte daher praktisch nur über GNavigia an. Trotzdem sollten Sie einige Details wissen.
  <Objects>
<object id="5003" name="Zermatt mit Breuil-Cervinia" exp="1">
<object id="5007" name="Zermatt - Sunnegga" exp="1">
<objex fbg="3210" prio="1" />
<trk id="3268" exp="0" />
</object>

</object>
</Objects>
Objekte dienen der Zusammenfassung von Tracks und anderen Objekten unter einem gemeinsamen Namen und der Summenbildung der Einzellängen. Es gelten wenige, aber strenge Regeln. Objekte können sich aus Objekten (O) zusammensetzen und aus Tracks, Textobjekten oder Objektreferenzen (TTO), aber nicht gleichzeitig auf derselben Hierarchiestufe, mit anderen Worten, hat ein Objekt bereits ein Element aus der TTO-Gruppe zugeordnet bekommen, so kann ihm kein Objekt zugeordnet werden und andersherum. Objektreferenzen dürfen keine Rekursion erzeugen, also nicht auf Objekte verweisen, die direkte Vorfahren sind! GNavigia prüft diese Bedingungen im Programmablauf, ist aber bei fremdbereitgestellten Objekten zurzeit machtlos. Beim Laden der Datei dürfte es daher einen «stack overflow» (neudeutsch: «Stapelüberlauf») geben.
Das Attrribut «exp» dient allein der Darstellung und besagt, ob der Knoten im Objektbaum geöffnet (aufgeklappt) ist, oder nicht.

Vergessen Sie nicht das schließende Tag des Stammknotens:
</GNavigia>

Eine Beispieldatei mit allen verfügbaren Elementen

Die folgende Beispieldatei enthält alle Elemente, die im Programm zum Einsatz kommen:
<?xml version="1.0" encoding="ISO-8859-1"?>
<GNavigia application="GNavigia ...">
<Styles>
<encoding text="ISO-8859-1" />
<author text="Thomas Korten" />
<homepage text="http://www.skiraware.de/GPS" />
<Schema name="Bildschirmdarstellung">
<Style name="Skirouten">
<LineWidth value="2" />
<LineColor value="ff00ffff" />
<LineStyle value="DashDotDot" />
<Font name="Microsoft Sans Serif">
<desc family="Microsoft Sans Serif" />
<grad size="10" bold="0" italic="0" />
</Font>
<AreaColor value="00ffffff" />
</Style>
...
</Schema>
<Schema name="KML-Export">
...
</Schema>
<Layout name="Bildschirmdarstellung">
<author text="Thomas Korten" />
<homepage text="http://www.skiraware.de/GPS" />
<headline text="Zermatt" />
<encoding text="ISO-8859-1" />
<majorwponly value="1" />
<schema name="Bildschirmdarstellung" />
<item fbg="3110" style="Skirouten" />
...
</Layout>
<Layout name="KML-Export">
...
<filename name="C:\Dokumente und Einstellungen\...\Output.kml" />
<schema name="KML-Export" />
<item fbg="3258" style="Aufstiegshilfen" />
...
</Layout>
</Styles>
<Mapping>
<scaling scale="0.0502667" />
<center worldY="405573.99" worldX="5095373.20" />
</Mapping>
<Settings>
<display layout="Bildschirmdarstellung" />
<show maskText="1" maskSmooth="1" heights="1" waypoints="1" trackpoints="0" />
<options selection="Add" />
<deleted value="No" />
<background guid="e5ba0208-4452-3664-99a6-503c846ca794" show="1" transparent="0"/>
</Settings>
<KML-Export>
<layout name="KML-Export" />
</KML-Export>
<Waypoints>
<wpt id="1" l="7.747704573" b="45.890034987" h="1618.733154">
<desc nam="007" cmt="007" desc="007" sym="007" />
<stat dtm="" sel="0" del="1" minor="0" />
</wpt>
...
</Waypoints>
<Tracks>
<trk id="477" nam="09-APR-06" dtm="2006-04-18T18:47:44Z">
<trkex fbg="1120" prio="1" />
<twpt start="0" end="0" sel="0" del="0" />
<style visible="0" color="" line="" />
<trkpt id="478" l="7.747743130" b="46.016814709" h="1609.864746">
<tpt trkid="477" dtm="2006-04-09T07:42:31Z" sel="0" del="1" />
<tpn nam="T 478" />
</trkpt>
<trkpt id="479" l="7.747893333" b="46.017222404" h="1628.610840">
<tpt trkid="477" dtm="2006-04-09T07:43:07Z" sel="0" del="1" />
<tpn nam="T 479" />
</trkpt>
...
<trkpt id="856" l="7.753922939" b="46.004948616" h="2215.014893">
<tpt trkid="477" dtm="2006-04-09T13:11:15Z" sel="0" del="1" />
<tpn nam="T 856" />
</trkpt>
</trk>
<trk id="857" nam="Fußweg zur Sunnegga" dtm="2006-04-09T13:11:15Z">
...
</trk>
</Tracks>
<Objects>
<object id="5003" name="Zermatt mit Breuil-Cervinia" exp="1">
<object id="5004" name="Zermatt" exp="1">
<object id="5005" name="Skigebiet" exp="1">
<object id="5006" name="Aufstiegshilfen" exp="1">
<object id="7226" name="Rothorn" exp="0">
<object id="5007" name="Zermatt - Sunnegga" exp="1">
<objex fbg="3210" prio="1" />
<trk id="3268" exp="0" />
<trk id="3271" exp="0" />
<trk id="3273" exp="0" />
</object>
...
</object>
<object id="7228" name="Gornergrat" exp="0">
...
</object>
</object>
<object id="5008" name="Skipisten" exp="1">
...
</object>
</object>
<object id="7033" name="Zermatt an einem Tag / in a day" exp="1">
<object id="6985" name="Alle Abfahrten" exp="0">
<text id="7530" name="Zermatt-Sunnegga"
text="<i>Zermatt-Sunnegga</i>" exp="1" />
<ref id="6998" obj="5018" exp="1" />
<text id="7532" name="Patrullarve-Blauherd"
text="<i>Patrullarve-Blauherd</i>" exp="1" />
<trk id="3296" exp="1" />
...
</object>
</object>
</object>
<object id="7261" name="Breuil-Cervinia" exp="1">
<object id="7263" name="Skigebiet" exp="1">
<object id="7475" name="Aufstiegshilfen" exp="1">
...
</object>
<object id="7474" name="Skipisten" exp="1">
...
</object>
</object>
</object>
<object id="7573" name="Gesamtskigebiet Zermatt/Breuil-Cervinia" exp="1">
<object id="7574" name="Aufstiegshilfen" exp="1">
<ref id="7576" obj="5006" exp="1" />
<ref id="7577" obj="7475" exp="1" />
</object>
<object id="7575" name="Skipisten" exp="1">
<ref id="7578" obj="5008" exp="1" />
<ref id="7579" obj="7474" exp="1" />
</object>
</object>
</object>
</Objects>
</GNavigia>

Kopieren von Layout- und Schemadifinitionen

Es gibt aber noch einen weiteren Grund, warum es nicht schlecht ist, die Datenstruktur zu kennen. Wenn Sie nämlich unter großen Anstrengungen diverse Layoutdefinitionen mittels Dialog erstellt haben, können Sie diese nicht ohne weiteres auf ein neues, bereits initialisiertes Projekt übertragen. In diesem Fall verlassen Sie GNavigia, machen Sie eine Sicherungskopie der Datendatei und fügen die Blöcke der Layout- und Schemadefnitionen von Hand ein. Die Blöcke befinden sich umschlossen von dem Element
  <Styles></Styles>, das Sie weit vorne am Anfang der Datei finden und das Sie als Ganzes übertragen können. Starten Sie danach das Programm neu und vergewissern Sie sich, dass die Datei korrekt geladen wurde und die Layout- und Schemadefinitionen korrekt in den einschlägigen Dialogen erscheinen!
Startseite, Impressum und Rahmen