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!
|