Converter: NOB – GPX

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.

tmpDirVorgabe für das Zielverzeichnis, Ablage der GPX-Files
tMarksplString 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 … z22Zeilen 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.