Für eine Demo hier klicken

AvnNav Karten Konvertieren

Konvertieren der Karten

Damit Karten in der WebApp verwendet werden können, müssen sie in einem „Kachelformat“ vorliegen. Das ist das Format, das durch Dienste wie OpenStreetMaps oder GoogleMaps benutzt wird. Eine Kartenkachel ist 256x256 Pixel gross. Die Welt wird dabei auf eine ebene Fläche projeziert (kann man sich das wie einen Papierzylinder vorstellen, der senkrecht steht und am Äquator um die Erde gewickelt wird). Jeder Punkt mit seinen Koordinaten (Länge/Breite) wird dann auf diesen Zylinder projeziert. Wie man das macht, welche Einheiten in der Projektion verwendet werden und ob die Erde als Kugel oder Ellipsoid mit verschiedenen Parametern modelliert wird, beschreiben die verschiedenen Projektionen. Die WebApp benutzt die sogenannte Google-Mercator Projektion (die Erde wird dabei als Kugel betrachtet) - mit dem EPSG code 900913. Die Einheiten auf dem Papier sind dabei Meter (die man natürlich in die entsprechenden Koordinaten umrechnen kann). Karten in einem anderen Format (z.B. WGS84 – Erde als Ellipsoid, immer in Grad) müssen daher ggf. reprojeziert werden.

Die gesamte Projektionsfläche wird bei der google Projektion in Kacheln unterteilt. Der Zoom level gibt an, in wieviele Kacheln die Fläche unterteil wird. Zoom level 0 bedeuted: Die gesamte Erde (von -85° bis +85° Breite – darüber ist die Projektion nicht definiert) auf einer Kachel von 256x256 Pixel. Mit jedem weiteren ZoomLevel wird feiner unterteilt: Zoom level 1: 2x2 Kacheln, 2: 4x4 Kacheln usw. Für uns reichen die interessanten Zoom Level von ca. 7 bis 18..19. Das bedeutet (level 19) 2^19x2^19 Kacheln.

Zur Darstellung wird die library openlayers verwendet. Diese lädt die entsprchenden Kartenkacheln je nach zoom level vom raspberry und zeigt sie an. OpenStreetMaps verwendet typischerweise diese Library.

Man kann sich leicht vorstellen, das bei hohen Zoomleveln schnell große Datenmengen zusammenkommen. Daher müssen wir für unsere Kartenkacheln ähnlich vorgehen, wie es auch bei den Papierkarten ist: Für Übersichten ein kleinerer Zoom Level, Detailkarten größer und z.B. Hafenpläne dann mit level 18 oder 19 (60cm/pixel bzw. 30cm/pixel). Um damit arbeiten zu können, werden die verschiedenen Detailgrade dann in Layern (Schichten) übereinandergelegt. Wenn es für ein Gebiet einen Layer mit besserem (grösserem) zoomlevel gibt, wird dieser angezeigt, wenn nicht, der mit der geringeren Auflösung (ggf. noch vergrössert). Um unsere Anzeigegeräte nicht zu überlasten, kann man typisch mit 3-5 Kartenlayern arbeiten (je nach Gerät...).

Damit besteht für die Kartenkonvertierung die Aufgabe darin, vorhandene Karten in solche Layer einzusortieren, sie ggf zu reprojezieren und dann die Kartenkacheln (sowie eine Beschreibungsdatei) zu erzeugen. Das erfordert meist eine ganze Menge Rechenleistung (und ggf. Zeit), daher ist das etwas, dass auf einem PC oder Laptop laufen sollte (der pi ist dafür zu schwach). Das ist aber nicht schlimm – man muss das ja nur einmal machen. Belohnt wird man dafür mit einer sogenannten „blattschnittfreien“ Darstellung.

Das Verfahren dazu hängt von der Quelle ab. Im Moment habe ich support für 2 „Wege“ der Kartenerstellung eingebaut:

  • Konvertierung von Karten mittels GDAL (z.B. BSB) – hier kann alles gelesen werden, was gdal kann

  • Nutzung von downloads mit dem Mobile Atlas Creator.

Ab der Version 2014-03-21 können die Karten in das GEMF Format konvertiert werden - das ist ein kompaktes Format - anstelle von sehr vielen einzelnen Files sind diese in einem großen File zusammengefaßt.

Achtung: die folgende Beschreibung bezieht sich auf diese Version - ältere Server-Versionen können mit der GEMF Datei nichts anfangen.

Konvertierung von Karten mit GDAL

Ab Version 2015-10-19 kann die Konvertierung direkt auf dem Raspi erfolgen. Da hier die Resourcen jedoch ziemlich begrenzt sind, muß mit längeren Laufzeiten gerechnet werden (Beispiel: Auf einem Raspi 2 dauerte das Konvertieren eines älteren NV Satzes (Ostsee 4) ca. 1 Stunde).

Dazu müssen die Karten in das /data/avnav/import Verzeichnis kopiert werden (ganze Sätze bitte in ein Unterverzeichnis). Der Server beobachtet dieses Verzeichnis und wird die Konvertierung starten, sobald er neue Dateien dort entdeckt. Neben den Dateien, die GDAL lesen kann, können auch Dateien vom Typ .mbtiles konvertiert werden. Der Zustand des "Importers" kann auf der Status Seite geprüft werden. Logfiles liegen dann unter /data/avnav/log. Ein Upload über die App wird sicher in einer späteren Version folgen.

Da beim Konvertieren temporär recht viele Dateien entstehen, sollte das Filesystem auf der SD Karte darauf vorbereitet sein (ist bei meinen Images so gegeben). Es sollte auch ausreichen Platz vorhanden sein (eine 8GB Karte ist aber gut ausreichend).

Einfacher geht die Konvertierung auf einem Windows (oder Linux/Mac) Rechner.

Für diese Konvertierung müssen einige Tools installiert werden.

Ab 2015-10-05 gibt es für Windows einen Installer, der alle benötigten Pakete enthält. Damit ist die Installation mit wenigen Klicks erledigt. Zum Download hier.

[Hier ist die  Beschreibung für den alten Stand ohne Installer.]

Der Hauptteil der Konvertierung wird durch tiler_tools durchgeführt (https://code.google.com/p/tilers-tools/) diese sind Bestandteil der Software und müssen nicht extra heruntergeladen werden..

Die Karten werden per default im Verzeichnis <UserHome>/AvNavCharts/out erzeugt (also z.B. c:\Users\Andreas\AvNavCharts\out). Zumindest in der Windows GUI kann das Verzeichnis gewählt werden. Standarmäßig ensteht für jeden Konverter-Lauf eine xxx.gemf Datei, xxx ist dabei der Dateiname der ersten Datei oder der Name des ersten gewählten Verzeichnisses.

Im AvNavCharts Verzeichnis gibt es auch noch ein work-Verzeichnis, dieses sollte nicht gelöscht werden, da dann bei einem Update (z.B. Berichtigungen eingepflegt) nur die geänderten Karten neu erzeugt werden müssen.

Die Konvertierung verläuft in 2 Schritten:

  • Sortierung der Karten in layer (und ggf. soweit nötig Konvertierung der karten).

  • Erzeugung der Kacheln

Wenn die Datei xxx.gemf rezeugt wurde, diese auf den raspberry nach /data/avnav/charts kopieren (darauf achten, dass sie für den Nutzer pi lesbar ist). Der Server sollte sie automatisch erkennen...

Der upload kann auch über die App erfolgen (dazu z.B. mit dem Laptop im Raspi WLAN anmelden und die Startseite aufrufen, dann Upload/Download).

Windows

Der Installer für windows installiert (wenn es angewählt wird) neben der eigentlichen Konverter-Software auch die nötigen Programme:

  • python 2.7.10 (32 Bit)
  • GDAL 1.11 für python 2.7 (32 Bit)
  • Pillow 2.7.0
  • pyserial 2.7
Alle Dateien werden unter ProgramFiles\AvNav installiert. Wenn AvNav deinstalliert wird, werden auch diese Anteile mit entfernt. Python und GDAL sollten nur dann mit installiert werden, wenn sie auf dem Rechner noch nicht vorhanden sind.
Nach der Installation kann man mit AvChartConvert die Applikation starten. Unter einigen Windows Versionen scheint der Start aus dem Installer heraus nicht sehr gut zu funktionieren (beim Start des Konverters blinkt kurz ein Fenster auf, aber es gibt noch nicht einmal ein logfile)- bitte einfach nochmal beenden und über das Startmenü/Desktop starten.

Die Applikation hat nur einen Bildschirm:

windows gui

Bei (1) können die zu konvertierenden Karten gewählt werden, bei (2) startet die Konvertierung. Es wird ein logfile geschrieben, das man mit "view" anschauen kann (das hätte ich auch gerne, wenn etwas nicht funktioniert).

Mit den default-Einstellungen startet danach sofort der AvNav Server (also die Software, die sonst auf dem Raspberry läuft) und ein Browser wird geöffnet, der die App anzeigt.

Wie im Bild zu sehen liefere ich eine Datei mit NMEA Daten mit (vom Greifswalder Bodden). Es kann natürlich zum Test auch jede andere eigene NMEA-log Datei gewählt werden.

Alternativ kann der Server auch direkt die NMEA Daten von einem angeschlossenen seriellen Gerät oder Bluetooth lesen (COM port) oder auch z.B. von einem Raspberry (IP). Wenn spezielle setups erforderlich sind, kann man über custom auch die Server-Konfiguration per Hand bearbeiten, eine Vorlage mit Kommentaren wird mitgeliefert.

Mit diesem Setup kann die Software damit also auch komplett z.B. and Bord auf einem Windows-Laptop benutzt werden. Die Funktionen sind die gleichen wie mit dem Raspberry.

Wenn man nur den Server starten möchte - rechts "startServer". Das muß man auch nach jeder Änderung tun.

OSX/Linux

Von der download Seite sollte die xxx-host.zip Datei heruntergeladen und in einem beliebigen Verzeichnis entpackt werden.

Für OSX und  Linux sind jeweils minimale GUIs vorhanden, die es erlauben die Konvertierung zu starten sowie zum Test der erzeugten Karten die Server-Software.

Unter OSX lann der Konverter durch Klick auf AvChartConvert im osx Verzeichnis gestartet werden (ggf. ins Dock legen für drag & drop), der Server durch Klick auf avnav.command.

Unter Linux gibt es ebenfalls eine minimale grafische Oberfläche - sie erfordert wxPython (python-wxgtk2.8). Zum Starten im linux Verzeichnis avnav_gui.py aufrufen (python-gdal muss installiert sein). Linux getestet unter Ubuntu 14.04.

Details

Im Folgenden werden die Konvertierungsschritte beschrieben - normalerweise muss man sich darum nicht kümmern - nur wenn die default-Einstellungen der GUI nicht gut genug sind...

Der erste Schritt geht relativ schnell. Alle Kartendateien werden gelesen und Auflösung und Abdeckung wird ermittelt (falls nötig wird konvertiert). Im Ergebnis entsteht im workdir/<name> Verzeichnis eine Datei chartlist.xml. Der Aufruf dazu lautet:

read_charts.py -o name -m chartlist inputdir [inputdir...]

Anschliessend sollte die chartlist.xml noch einmal mit einem Texteditor überprüft werden, manchmal macht es Sinn, Kartendateien noch einem anderen Layer zuzuordnen. Das kann einfach durch Verschieben des entsprechenden XML Elements erfolgen. Man kann sich dazu an den Namen der Karten orientieren - meist mach es Sinn Karten vergleichbaren Detailgrades in einen Layer zu verschieben.

Der zweite Schritt ist etwas langwieriger, hier erfolgt die eigentliche Erzeugung der Kartenkacheln. Der Aufruf:

read_charts.py -o name -m generate 

Unter workdir/<name> muss bereits eine chartlist.xml existieren. Die Erzeugung läuft multi-threaded, auf einem Dual Core 2x2Ghz ca. 20 min für einen Kartensatz mit ca. 20 Karten.

Man kann auch beide Schritte kombinieren – dazu einfach -m all noch vor den anderen Parametern bei Schritt 1 angeben:

read_charts.py -m all [-o name] inputdir

Nutzung von Karten mit dem Mobile Atlas Creator

Für die Nutzung des Mobile Atlas Creators ist keine weitere Software auf dem PC/Laptop nötig. Man muss beim Download der Karten allerdings ein gewisses Schema einhalten, damit die Karten in das oben beschriebene Layer-Konzept passen und die Datenmengen überschaubar bleiben.

Dazu sollte man (je nach Kartenquelle) z.B. 3 Layer vorsehen: Übersicht( Zoom Level 7-10) Navigation (level 10-15), Details (Level 16-18). Anschliessend sollte man im MOBAC layerweise vorgehen. Dazu jeweils als gewünschte Zoomlevel die zum Layer gehörigen anklicken (links oben), danach alle Teilbereiche jeweils markieren und unter einem beliebigen Namen dem Atlas hinzufügen. Das jeweils für die anderen Layer wiederholen (dabei sinnvolle Auswahlen treffen). Anschliessend sollte man die Atlas-Konfiguration unter einem beliebigen Namen speichern - die kann man ggf. nochg für weitere Versuche brauchen. Als output Format OsmDroid GEMF (File->convertAtlasFormat) wählen und die Atlas-Erzeugung starten. Im output Verzeichnis entsteht eine xxx.gemf Datei. Diese auf den raspberry unter /data/avnav/charts kopieren. Ab der Version avnav-2014-04-08 ist das ausreichend, bei älteren Versionen muss man noch Folgendes tun:
Den Atlas speichern (Profil speichern). Diese Datei (liegt im Programmverzeichnis von MOBAC) in das gleiche Verzeichnis kopieren und zu xxx.xml umbenennen (wichtig!).

Auf der download Seite sammle ich chart sources für den mobac, die für uns nützlich sein lönnten.