Navit vereint Kartenmaterial von Openstreetmap, D-Bus-Anbindung und eine eigene Augmented-Reality-Integration (AR) zur modernen Navigationsanwendung. Ob und wie sich das eigene mobile Linux-Gerät zum freien Navi eignet und was die Software kann, zeigt dieser Artikel .
Freiheit geht vor: Das moderne Smartphone läuft mit Linux, Android oder Symbian. Natürlich hat der Open-Source-Evangelist auch im Navi längst Openstreetmap-Daten ([1], [2]). Aber fürs Navigieren kommt – vom I-Phone bis zum Milestone – meist proprietäre Software zum Einsatz, etwa Google Maps, Eigenentwicklungen der Hersteller oder Zukäufe wie bei Nokias OVI-Karten.
Damit das nicht so bleibt, entwickelt seit mittlerweile fünf Jahren eine stetig wachsende Community die Open-Source-Navigationssoftware Navit [3]. Das in C/C++ implementierte Projekt gibt es für zahlreiche Plattformen, es unterliegt der GPL und ist dank seines modularen Aufbaus sehr anpassungsfähig. Weil es Vektordaten anstelle von Rasterkarten nutzen kann, lässt es sich auch problemlos ohne Verbindung zu einem Kartenserver verwenden. Anders als die meisten Konkurrenten erzeugt es die angezeigten Maps dynamisch zur Laufzeit aus den Vektordaten. Ein Caching-Mechanismus sorgt dafür, dass Navit während einer Sitzung nicht ständig die gleichen Karten neu generiert.
2D- und 3D-Ansicht
Wie bei teuren Navigationssystemen kann der Nutzer zusätzlich zur typischen 2D-Kartenansicht in der Vogelperspektive auch in eine 3D-Ansicht wechseln. In beiden Varianten zeigt es die so genannten Points of Interest (POI), also Orte von besonderem Interesse, etwa Parkplätze, Sehenswürdigkeiten oder auch Gaststätten an (Abbildung 1). Zumindest in Städten bietet Openstreetmap hier mittlerweile eine fast unüberschaubare Datenfülle an.

Abbildung 1: Die Open-Source-Routingsoftware beherrscht auch die für viele Navigationsgeräte typische 3D-Darstellung, integriert dabei aber auch zahlreiche Points of Interest von Openstreetmap.
Das Navit-GUI (Abbildung 2) ist bewusst schlicht gehalten und bereits für die Bedienung über ein Touchdisplay und auf schmächtigen Embedded-Systemen ausgelegt. Als Grafik-Toolkit kann man unter dem Gimp-Toolkit (GTK++), dem Qt-GUI sowie der SDL-Bibliothek (Simple Direct Media Layer) wählen.

Abbildung 2: Das Hauptmenü von Navit lässt sich sowohl mit der Maus als auch auf einem Touchscreen bedienen. So funktioniert die Software sowohl auf PCs als auch auf modernen Smartphones.
|
Listing 1: |
|---|
01 <config xmlns:xi="http://www.w3.org/2001/XInclude"> 02 [...] 03 <!-- This line defines which location on the map navit will show after startup --> 04 <navit tracking="1" orientation="-1" recent_dest="10" center="5209.5 N 1328.5 E" zoom="128" zoom_max="16384" timeout="3600"> 05 <!-- Use one of gtk_drawing_area, qt_qpainter or sdl. --> 06 <graphics type="gtk_drawing_area" delay="3" w="648" h="412" font_size="50"/> 07 <!-- The following line let you select which graphical user interface you'd like to use. --> 08 <gui type="gtk" enabled="no" menubar="1" toolbar="1" statusbar="1"/> 09 [...] 10 </navit> 11 </config> |
Qt, GTK oder SDL
Das teilt der Benutzer Navit in der zentralen, reichlich dokumentierten Konfigurationsdatei »navit.xml« (Listing 1) mit. Die findet er entweder in »/etc/navit/« oder in »/usr/share/navit/« oder in seinem Homeverzeichnis unter ».navit/«. Letzteres ist zweifellos der beste Ort für Änderungen, denn die beiden anderen überschreibt das Paketmanagement bei Updates in der Regel. Wer mehr Infos über die zahlreichen Konfigurationsparameter braucht, wird im Projekt-Wiki [4] fündig.
Die Einstellungsmöglichkeiten umfassen neben der Konfiguration der Programmbibliotheken auch die Angabe einer Standard-Startposition, den für Entwickler relevanten Debuglevel sowie das zu verwendende Kartenmaterial. Damit dies auch offline vorliegt, gibt es mit der Website von Planet Extractor [5] einen eigenen Generator für Openstreetmap-Navit-Karten.
Routen und Tracken
Auch das Ziel einer neu zu berechnenden Route kann der Anwender am Touchscreen über eine Bildschirmtastatur eingeben, wobei als Startpunkt die eigene Position vorausgewählt ist. Analog zum Zielort lässt sich aber auch ein alternativer Ausgangspunkt über die Suchmaske definieren (Abbildung 4). Auch die verwendete Default-Schriftgröße findet sich in »navit.xml«, bei den unterschiedlichen Displaygrößen eine sicherlich häufiger benötigte Einstellung.

Abbildung 4: Navit unterstützt zahlreiche Plattformen, auch die Suchfunktion mit Onscreen-Tastatur ist für mobile Geräte vorbereitet.
Durch die Aktivierung der Tracking-Option kann Navit eine gefahrene Route aufzeichnen und wahlweise im GPX-, NMEA- oder einem einfachen Textformat speichern. Intern dienen dem Programm für die Einbindung der Routen simple Textdateien.
Streckenbeschreibungen, die es aus anderen Systemen übernehmen soll, muss der Anwender in dieses Navit-TXT-Format umwandeln. Für GPX-Dateien liegt den Ubuntu-Paketen das Programm »gpx2navit_txt« bei.
Mobile Sprachausgabe
Die freie Navigationssoftware läuft auf praktisch jedem Linux-System. Anwenderberichte zeugen von erfolgreichen Tests auf dem Openmoko Freerunner, Nokias Maemo auf dem N800/810/900, I-Phone, Zaurus und auf Geräten mit Googles Android-Betriebssystem.
Navit integriert Module für die Sprachausgabe und stellt dynamisch generierte Textdaten in aktuell dreißig gut gepflegten Sprachmodulen bereit. Die gibt ein Sprachsynthesizer wie Espeak [6] aus und ermöglicht so eine akustische Routenführung, wie das Benutzer moderner Navigationsgeräte erwarten.
Die Angabe der zu verwendenden Maps findet sich in der Konfigurationsdatei unter dem Node »mapset«. Sie kann auf zwei Arten erfolgen: Entweder setzt der Nutzer in »navit.xml« explizit den Pfad zur Binärdatei mit dem Kartenmaterial (Listing 2) oder er verweist über Xinclude-Direktiven (Listing 3) auf weitere Konfigurationsdateien.
Dynamische Karten
Der Vorteil der zweiten Variante ist, dass Navit sämtliche XML-Dateien im Zielordner nach Angaben für einzubindendes Kartenmaterial durchsucht. Neue Karten lassen sich leicht hinzufügen, indem der User im angegebenen Zielordner die Binärdateien ablegt und jeweils eine XML-Include-Datei (Listing 4) erzeugt. Über die Attribute »active« und »route_active« kann er für die Routenerstellung quasi im Hintergrund sogar eine andere Karte verwenden als für die Anzeige.
|
Listing 2: |
|---|
01 <!-- Mapset template for openstreetmaps germany --> 02 <mapset enabled="yes"> 03 <map type="binfile" enabled="yes" data="/usr/share/navit/maps/germany_osm.bin"/> 04 </mapset> |
Somit ließen sich beispielsweise die fürs Routing verwendeten Straßen limitieren, um eine Vorgabe für bevorzugte Routen umzusetzen. Recht neu ist die Option »search_active«, die explizit angibt, welches Kartenmaterial Navit für die Suchfunktion verwendet.
|
Listing 3: |
|---|
01 <!-- multiple mapsets via xml --> 02 <mapset enabled="yes"> 03 <xi:include href="$Navit_SHAREDIR/maps/*.xml"/> 04 </mapset> |
Der Routing-Test (Abbildung 5) auf Basis der Openstreetmap-Daten zeigt aber immer wieder, dass diese noch Lücken bei den Hausnummern aufweisen. Um dem zu begegnen, kann Navit neuerdings eine Straße als Ziel akzeptieren, wobei es einen Mittelwert berechnet, der die Mitte der als Ziel ausgewählten Straße identifiziert.
|
Listing 4: |
|---|
01 <map type="binfile" active="1" route_active="1" search_active="1" data="$Navit_SHAREDIR/maps/osm_deutschland.bin"/> |

Abbildung 5: Die Software erstellt Routen für Auto- und Fahrradfahrer sowie Fußgänger und gibt Navigationsanweisungen.
Navit und D-Bus
Ein eigens für die Interprozess-Kommunikation entwickeltes D-Bus-Plugin [7] erweitert Navit über eine reine Standalone-Desktopapplikation oder einen einfachen GPS-Sensor hinaus. Andere Anwendungen können auf diese Weise über die D-Bus-Verbindung Referenzen auf die entfernten Navit-Objekte erzeugen und deren Eigenschaften zur Laufzeit anpassen. Wie flexibel sich das einsetzen lässt, zeigt Listing 5, mit dem eine Java-Anwendung über D-Bus detaillierte Daten aus Navit abfragt.
Indem es einen von anderen Anwendungen zugewiesenen Anzeigebereich akzeptiert, lernt Navit auch ohne eigenes Fenster zu starten. Das ist möglich, weil sich das Attribut für die Window-ID des Grafikobjekts in Navit dynamisch per D-Bus (»graphics.set_attr()«) setzen lässt:
embeddedHandle = retrieveEmbeddedHandle(navitCanvas);
graphics.set_attr("windowid", UembeddedHandle);
Analog können Programme die Start- und Zielposition für das Routing an das Route-Objekt übergeben und ebenfalls dynamisch die Datenquelle für die GPS-Daten austauschen. Möglich ist auch die Verarbeitung von GPS-Daten direkt über den NMAE-Sensor, per Gpsd [8], Gpsd über D-Bus, Androids GPS [9] oder mobile Tools wie Maemos Mapper [10].
|
Listing 5: D-Bus und |
|---|
01 private void setupLowlevel() throws D-BusException, D-BusExecutionException {
02 bus = D-BusConnection.getConnection(D-BusConnection.SESSION);
03 bus.addSigHandler(Navit.Signal.class, signalHandler);
04 bus.addSigHandler(Navit.Startup.class, this);
05 navit = bus.getRemoteObject(SERVICE_NAME, Navit_NODE_NAME, Navit.class);
06 gui = bus.getRemoteObject(SERVICE_NAME, GUI_NODE_NAME, Gui.class);
07 graphics = bus.getRemoteObject(SERVICE_NAME, GRAPHICS_NODE_NAME,Graphics.class);
08 vehicle = bus.getRemoteObject(SERVICE_NAME, VEHICLE_NODE_NAME,Vehicle.class);
09 route = bus.getRemoteObject(SERVICE_NAME, ROUTE_NODE_NAME, Route.class);
10 }
|
POIs filtern
Neben Features wie dem Umschalten zwischen Tag- und Nacht-Modus beherrscht Navit auch das Filtern von POIs. Beim Anklicken eines Point of Interest sendet Navit ein D-Bus-Signal mit einer Liste der POI-IDs im Fangbereich. Dieses Vorgehen ist notwendig, da es durchaus vorkommt, dass mehrere POIs eng beieinander liegen und somit keine klare Zuordnung möglich ist. Mit Hilfe der Liste kann die Drittanwendung dem Anwender die POIs in einer eigenen Darstellung zur Auswahl anbieten. So sind wesentliche Konfigurationselemente der Datei »navit.xml« über D-Bus erreichbar und per Abfragefunktion (Introspection) detailliert ermittelbar.
Die implementierten Funktionen erlauben es, Navit weitgehend unabhängig vom ursprünglichen Benutzerinterface zu steuern und es in Drittanwendungen einzubetten. Mit Vorsicht zu genießen ist bei der Interprozess-Kommunikation jedoch, dass eine Anwendung, die Navit integriert, bei unbedachter Implementierung Gefahr läuft, von einem abstürzendem Navit mit in den Tiefschlaf gerissen zu werden. Ein entsprechender Funktionsaufruf durch die Rahmenanwendung würde auf eine Antwort warten und einfrieren.
Eine Lösung wäre es, Threads zur Überwachung der Kommunikation in der Rahmenanwendung zu implementieren. Im Zweifelsfall können diese aktiv den Funktionsaufruf abbrechen, den aktuellen Zustand speichern, Navit automatisch neu starten und die D-Bus-Kommunikation dann wieder neu aufsetzen.
Augmented Reality
Die Flexibilität von Navit hat in den letzten Jahren einige Folgeprojekte angeregt. An der Universität Potsdam beschäftigen sich Geografen wie Mario Kluge (Kasten “Reality View mit Navit”) damit, die Liveview der Handykamera mit Informationen aus Kartendiensten, etwa für interaktives Routing, zu ergänzen.
An einem anderen Weg entwickeln derzeit Firmen, die Navit als mobile Komponente in Fahrzeugflotten verwenden. Hier soll branchenspezifische Software in der Zentrale mit den Fahrzeugen kommunizieren und diese automatisch zum nächsten Ziel leiten. Wer Navit testen will, kann dies mit der allerdings recht jungen Mandriva Navigation Edition [13] probieren.
|
Infos |
|---|
|
[1] Christoph Wagner, “Alle Wege Offen”: Linux-Magazin, 06/2010, S. 40 [2] Christoph Eckert, “Gute Führung”: Linux-Magazin, 12/2009, S. 40 [3] Navit-Projekt: [http://www.navit-project.org] [4] Navit-Wiki: [http://wiki.navit-project.org] [5] Openstreetmap-Karten für Navit:[http://maps.navit-project.org/download] [6] Espeak: [http://espeak.sourceforge.net] [7] D-Bus: [http://freedesktop.org/wiki/Software/dbus] [8] Gpsd: [http://gpsd.berlios.de] [9] Android: [http://www.android.com] [10] Maemo: [http://maemo.org] [11] Navit Reality View: [http://wiki.navit-project.org/index.php/Navit_with_Augmented_Reality] [12] Fußgängernavigation an der Uni Potsdam: [http://www.geographie.uni-potsdam.de/fussgaengernavigation] [13] Mandriva Navigation Edition: [http://www.mandrivauser.de/wordpress/?+p+522] |
|
Der Autor |
|---|
|
Thomas Haase hat mehrere Jahre als Software-Entwickler gearbeitet und betreut bei der Tarent GmbH verschiedene OSS-Projekte als Projektmanager. |






