Kartennavigation auf Smartphones mit GpsMid

Mit GpsMid steht eine hervorragende Navigationssoftware für Java-Smartphones zur Verfügung. Sie ist nicht nur selbst frei und quelloffen, sondern verwendet auch das freie Kartenmaterial von OpenStreetMap. Software und Kartendaten können – verpackt in einer JAR-Datei als MIDlet – vom PC auf das Mobiltelefon geladen werden; sofern man von dort aus keine weiteren Daten nachlädt, fallen also keine Mobilfunk-Übertragungskosten an. Darüber hinaus lässt sich das Programm – auch wenn der Name anderes suggeriert – problemlos auch ohne GPS-Gerät verwenden; man muss dann halt die Navigation per Hand vornehmen, was sich aber schon dadurch relativiert, dass die Vor-Ort-Navigation ohnehin nur einen Spezialfall der allgemeinen Kartennutzung darstellt.

Wie bekomme ich nun die Karte aufs Smartphone? Am einfachsten geht es, wenn man eines der gebrauchsfertigen Pakete von der GpsMid-Projektseite verwenden kann. In diesem Fall muss man nur die entsprechende JAR- und optional JAD-Datei auf den PC herunterladen, aufs Handy kopieren, dort installieren und fertig. (Wie das Installieren auf dem Smartphone selbst erfolgt, hängt vom Modell ab und wird hier nicht weiter betrachtet.)

Was aber, wenn gerade mein gewünschter Kartenausschnitt nicht dabei ist oder das Handybetriebssystem die Installation der JAR-Datei verweigert? Letzteres kann passieren, obwohl auf der Speicherkarte noch genügend Platz ist, da es hier oft Beschränkungen für die Größe einer einzelnen zu installierenden JAR-Datei gibt. Wenn man auf diese Weise also nicht weiterkommt, kann man auf dem PC ein MIDlet in Form einer JAR- und zugehöriger JAD-Datei mit dem passenden Kartenausschnitt selbst erstellen; auch mehrere Ausschnitte in einer Datei sind möglich.

Dazu benögt man auf dem PC zunächst Folgendes:

  1. Das Java Runtime Environment (JRE), mindestens in der Version 1.5.

  2. Das Programm Osm2GpsMid von der GpsMid-Downloadseite (aktuelle Dateiversion Osm2GpsMid-0.6.jar zum Zeitpunkt des Schreibens dieser Anleitung).

  3. Eine OSM-Datei, die die OpenStreetMap-Daten mindestens des gewünschten Ausschnitts in XML-Form enthält. Die Osm2GpsMid-Projektseite verweist auf einige mögliche Downloadquellen. Ich selbst habe gute Erfahrungen mit der Geofabrik gemacht.

  4. Eine Properties-Datei, die die Erzeugung des resultierenden Kartenmaterials durch Osm2GpsMid steuert. Diese Konfigurationsdatei mit obligatorischer Namensendung .properties muss man selbst erstellen, ggf. aus einer Vorlage. Wie man das macht, wird sogleich erläutert.

Der wichtigste Eintrag in der .properties-Datei ist der gewünschte Kartenausschnitt. Diesen definiert man durch Angabe des jeweils minimalen und maximalen Breiten- und Längengrades, z. B.

bundle.name = berlin
region.1.lat.min = 52.5008
region.1.lat.max = 52.5406
region.1.lon.min = 13.4047
region.1.lon.max = 13.4671

Man kann hintereinander bis zu 9 durchnummerierte Regionen für Kartenausschnitte aus den nach Punkt 3 heruntergeladenen Rohdaten angeben. Die benötigten Breiten- und Längengrade gewinnt man am besten von openstreetmap.org, indem man dort zunächst den gewünschten Ausschnitt wählt, dann auf Export geht, hier bei Bedarf den Bereich noch mal manuell anpasst und anschließend die Bereichsdaten abliest: unten und oben für die Breitengrade (lat), links und rechts für die Längengrade (lon). Den Export selbst muss man an dieser Stelle natürlich nicht durchführen, man braucht nur die Zahlen. Sollte sich die am Ende ergebende JAR-Datei wie oben erwähnt als zu groß erweisen, muss man einen kleineren Ausschnitt wählen; notfalls muss man den gewünschten Kartenausschnitt auf mehrere MIDlets verteilen (s. u.).

Weitere Einstellungen, die man in der .properties-Datei vornehmen kann (aber nicht muss), betreffen spezielle Zielsysteme (app), die Angabe einer Stildatei (style-file) oder die Möglichkeit, Streckenführung bzw. Editierung ein- oder auszuschalten (useRouting und EnableEditing); mehr dazu findet man auf der Osm2GpsMid-Projektseite. Die meisten dieser Einstellungen beeinflussen die Größe der resultierenden JAR-Datei.

Eine interessante Möglichkeit bietet noch die Einstellung midlet.name. Dadurch kann man dem Endprodukt einen besonderen Namen geben (statt des Standardnamens GpsMid), womit mehrere Instanzen des Programms mit verschiedenen Kartendaten auf das Mobiltelefon geladen werden können; etwa

midlet.name=GpsMidBerlin

Ein Beispiel für eine komplette .properties-Datei (optimiert für geringen Speicherverbrauch) findet sich im Anhang. Sie produziert mit den Rohdaten aus berlin.osm.bz2 von der Geofabrik-Downloadseite für Deutschland (s. Punkt 3 oben) mit der nachfolgend beschriebenen Prozedur eine Datei GpsMidBerlin-0.6.jar von knapp 800 KiB.

Nachdem man nun alle benötigten Utensilien zusammengestellt hat, kopiert man die nach Punkt 2 bis 4 erhaltenen Dateien in ein Verzeichnis auf dem PC. Dieses sollte dann enthalten:

  • Das Java-Archiv Osm2GpsMid-0.6.jar (oder eine neuere Version davon, falls erhältlich).
  • Eine OSM-Datei, die den oder die zu generierenden Kartenausschnitt(e) enthält (in diesem Beispiel berlin.osm.bz2).
  • Die erstellte Konfigurationsdatei, etwa berlin.properties aus dem Anhang (ggf. angepasst an die eigenen Belange).

Aus diesem Verzeichnis heraus ruft man dann etwa den Befehl

java -Xmx1024M -jar Osm2GpsMid-0.6.jar berlin.osm.bz2 berlin

auf. Dieser startet – in diesem Beispiel – das Osm2GpsMid-Programm zur Erzeugung eines MIDlets zur Kartennavigation aus den Rohdaten von berlin.osm.bz2 unter Berücksichtigung der Konfigurationsdaten in berlin.properties; der Parameter -X teilt der Java-Maschine (hoffentlich) genügend Arbeitsspeicher zu.

Das Resultat sind – wieder in diesem Beispiel – zwei Dateien, GpsMidBerlin-0.6.jad und GpsMidBerlin-0.6.jar, die man wie oben beschrieben aufs Smartphone laden und dort installieren kann.

AnhangGröße
Binärdaten berlin.properties1.28 KB

Bereich:

System: 
GpsMid 0.6
Java ME/MIDP 2.0
(getestet auf LG KP500)
Symptom: 

GpsMid soll mit Kartenmaterial auf einem Java-Smartphone installiert werden. Unter Umständen sprengt die resultierende JAR-Datei ein von der Systemsoftware vorgegebenes Limit.