Mit dem NV Chart Viewer (Lite) kann man u.a. auch Routen erstellen. Diese lassen sich als entweder in eine Cloud übertragen oder als externe Datei abspeichern. Da die Cloud eine Internetverbindung voraussetzt, diese aber nicht überall verfügbar ist, speichere ich die Routen zur weiteren Verwendung in einer externen Datei ab.
Problem:
Die erzeugte NOB-Datei lässt sich nicht direkt mit anderen Programmen oder beliebigen Geräten verwenden. Um z.B. die erstellen Routen unter OpenCPN verwalten zu können, müssen die in ein entsprechendes Format überführt werden. Hierfür nutze ich das GPX Format. Dieses ist sowohl in OpenCPN als auch verschiedenen Endgeräten (z.B. Garmin GPSmap 64s) nutzbar.
Lösung:
Zur Konvertierung der NOB-Datei in GPX habe ich ein Python-Script geschrieben.
Dieses fragt in einem Dialog, die Quelldatei (NOB-File) und das Zielverzeichnis (in das die GPX-Files erstellt werden) ab.
Aufbau NOB-File
Wie beim GPX-File ist das NOB-File auf Basis von XML aufgebaut. Allerdings sind die Strukturen sehr unterschiedlich.
So sind im ersten Teil im NOB-File die Routen mit ihren Markierungs-ID im oberen Teil festgehalten. Erst im unteren Teil werden zu diesen IDs die eigentlichen Positionen und weiter Angaben wie Namen aufgeführt.
Hinweis
Zudem werden beim Speichern im NV Chart Viewer immer alle erstellten Routen in das NOB-File übertragen. Es ist nicht möglich, nur eine bestimmte Route abzuspeichern.
Hieraus ergibt sich, dass aus einem NOB-File ein bis mehrere GPX zu erzeugen sind. Deren Anzahl ergibt sich aus der Anzahl der Route-Tags mit ID im ersten Abschnitt des NOB-Files.
Damit die einzelnen Routen nach dem Konvertieren leichter wiedergefunden werden, sollten diese beim Erstellen (vor dem Speichern) entprechend benannt werden.
Dies erfolgt nach Markierung der Route rechts im Fenster „Eigenschaften“.
Python-Script
Das Script unterglieder sihc in die Bereiche:
- Globale Werte
- Funktionen
- Hauptteil
Globale Werte
Wie zu vermuten, werden hier Einstellungen/Parameter gesetzt, die als Vorgabe dienen und ggf. angepasst werden können.
tmpDir | Vorgabe für das Zielverzeichnis, Ablage der GPX-Files |
tMarkspl | String zum Splitten der Einträge im Block <Mark> … </Mark>, ID der Routen-Markierungen, um die Länge des Strings zu ermitteln, NOB-File mit einem einfachen Editor (z.B. notepad) öffnen und die leere Zeichenkette von Beginn der Zeile bis zur „{„ kopieren und hier unter dem Parameter hinterlegen |
z1 … z22 | Zeilen für den Rahmenaufbau des GPX-File z11: Smyboltype in Darstellung von GPX-Viewer (diamond, city, flag, xmblue, ..) |
Funktionen
writeGPX1() schreibt den ersten Teil der GPX-Datei, das ist der Teil bis zu den Positionen
writeGPX2() schreibt die Positionen in die GPX-Datei
writeGPX3() schreibt den letzten Teil der GPX-Datei
readNOB() liest die Struktur der Quelldatei (NOB) und ermittelt dabei die Anzahl der Routen, diese werden mit einer Schleife durchlaufen, so daß je Route ein GPX-File erzeugt wird
Der Name für die GPX-Datei ergibt sich aus dem Name-Tag im oberen Teil innerhalb des Route-Tags. Ferner lassen sich Start- und Zielhafen aus dem Namen-Tag der Route ableiten. Sofern im NV Chart Viewer der Name in der Form erfasst wurde: Starthafen + „-„ + Zielhafen (z.B. Wilhelmshaven-Wangerooge).
Hinweis
Die Markierungs-ID für die Positionen werden bei den Routen (im oberen Teil des NOB-File) in einem Block weggeschrieben (<Marks> … </Marks>). Dieser Block wird von Python als String interpretiert. Um die einzelnen ID-Einträge zu ermitteln, wird der String in ein Array anhand der Leerstellen (Tabs) gesplittet (Zeile 72-75). Falls es zu Problemen beim Erkennen der IDs kommen sollte, wäre zu prüfen, ob die IDs richtig anhand der Splittung ermittelt werden!
btnStart() wird über Stat-Button aufgerufen
getOpenFile() selbsterklärend
getSaveFile() wird derzeit nicht genutzt
getSaveDir() selbsterklärend
Hauptteil
Im Hauptteil wird der Dialog aufgebaut. Die Struktur sollte hierbei weitestgehend selbsterklärend sein. Ähnlich wie bei Java erfolgt dies hier auch im Gridlayout.
Nach Ausführung des Programms sollten im angegebenen Zielverzeichnis die GPX-Files liegen.
Download: nob2gpx.py
Viel Spaß mit dem Converter.
Falls ihr Anregungen und Ergänzungen habt, würde ich mich freuen, wenn ihr dies mitteilt.