Projekt 2.1

Im mapsforge Projekt existiert eine offline-Kartenanwendung für Android-Geräte. Sie rendert Kartenbilder aus lokal gespeicherten OSM-Daten und erzeugt daraus eine frei verschiebbare Karte, vergleichbar mit Google Maps. Allerdings ist es mit diesem Programm nicht möglich, zusätzliche "Points of Interests" (POIs) aus einer separaten Datenquelle auf der Karte einzublenden. Dieses Hinzufügen von Markierungen beispielsweise für Tankstellen oder Restaurants ist jedoch wichtig für Entwickler, die mit der Kartenanwendung eigene Programme entwickeln wollen. Auch für das Einzeichnen von Routen fehlt bislang noch eine Unterstützung im Kartenprogramm, obwohl im mapsforge Projekt bereits ein Webservice zur Berechnung von Routen auf einem Webserver geschaffen wurde.

Ziel dieses Projektes ist es daher, die vorhandene Kartenanwendung um eine API zu erweitern, mit der das Einzeichnen von POIs und Routen über der Basiskarte (sogenannte "Overlays") möglich ist. Um anderen Entwicklern das Arbeiten mit dem Programm so einfach wie möglich zu gestalten, soll dabei die API der Google Maps library (http://code.google.com/intl/de-DE/android/add-ons/google-apis/) nachgebaut werden. Ein wichtiger Aspekt des Projektes ist das Entwickeln einer geeigneten Overlay-Architektur, die gut in das vorhandene Rendering integriert werden kann und auch bei vielen zusätzlichen Punkten noch eine hohe Performance ermöglicht. Dazu bietet sich beispielsweise das Cachen von einmal gezeichneten Objekten an, um ein zeitraubendes Neuzeichnen beim Verschieben der Karte zu vermeiden. Erschwerend kommt hinzu, dass einem Programm unter Android unabhängig vom tatsächlich vorhandenen RAM derzeit nur maximal 16 MB RAM zur Verfügung stehen, für das Kartenzeichen-Modul sogar nur ein Teil davon. Diese Einschränkung muss bei der Ausarbeitung einer Lösung berücksichtigt werden.

Ablauf:
Um sich mit dem Projekt mapsforge, der Android-Plattform und der Google Maps API vertraut zu machen, bietet sich eine einfache Aufgabe zum Einstieg an. Dabei soll der vorhandene Routing-Webservice aus dem mapsforge-Projekt mit einer Google Maps Karte auf einem echten Android-Gerät verknüpft werden. Ein einfaches Menü zur Eingabe von Start und Ziel sowie der Aufruf der ebenfalls bereits existierenden Komponente zur Weitergabe der Daten an den Routing-Webservice sind hierzu erforderlich. Sobald das Ergebnis vom Webservice vorliegt, müssen die zurückgegebenen Punkte über die Google Maps API auf der Karte eingezeichnet werden.

Im Anschluss daran wird die eigentliche mapsforge Kartenanwendung analysiert und ein Ansatz entwickelt, wie Overlays hinzugefügt werden können. Dazu müssen gegebenenfalls Tests durchgeführt werden, um die Möglichkeiten und Beschränkungen verschiedener Ansätze auszuloten. Am Ende sollte ein von allen Mitarbeitern getragener Entwurf stehen, der dann in Form eines Prototyps implementiert wird. Die einzuzeichnenden POI-Daten sollen für diesen Fall aus einer lokal gespeicherten Datei (beispielsweise im KML-Format) stammen. Das erzielte Ergebnis soll den übrigen Seminarteilnehmern sowie der gesamten mapsforge-Gruppe präsentiert werden.


Projekt 2.2


Das in Aufgabe 2.1 beschriebene Kartenprogramm verwendet zum Zeichnen von Linien und Polygonen die in Android vorhandene 2D-Grafik-API. Diese basiert auf der in C++ geschriebenen Skia graphics library (http://code.google.com/p/skia/), welche unter anderem auch in Google Chrome verwendet wird. Skia hat neben dem Fehlen von 3D-Unterstützung noch einige weitere Einschränkungen. Beispielsweise lassen sich keine Polygone mit einem Hintergrundmuster zeichnen und es ist kein Z-Buffering möglich. Die Skia Libary verwendet zudem keine Hardwarebeschleunigung, was die Render-Geschwindigkeit der Kartenanwendung erhöhen könnte. Als Alternative zu Skia bietet Android Unterstützung von OpenGL ES 1.0, eine Untermenge der OpenGL-Schnittstelle angepasst für mobile Geräte. Mit OpenGL ES ist sowohl 3D-Grafik als auch Hardwarebeschleunigung möglich. Allerdings lassen sich die jetzigen Skia-Zeichenaufrufe des Kartenrenderers nicht direkt in OpenGL Aufrufe umwandeln, da Skia eine High-Level-Schnittstelle anbietet, während die Daten für OpenGL in Form von Arrays übergeben werden müssen. Hinzu kommt, dass OpenGL nur Punkte, Linien und Dreiecke als primitive Datentypen unterstützt und nicht beliebig geformte Polygone, wie sie in den OpenStreetMap-Daten vorkommen und für korrekte Kartenbilder gezeichnet werden müssen.

Ziel dieses Projektes ist es daher, die vorhandene Rendering-Engine auf OpenGL zu portieren, so dass die Vorteile von OpenGL beim Rendern von Kartenbildern genutzt werden können und langfristig auch eine 3D-Kartendarstellung möglich ist.

Ablauf:
Am Anfang ist eine Einarbeitung in OpenGL ES erforderlich, wozu es zahlreiche Tutorials und Anleitungen im Netz gibt. Die jetzige Rendering-Architektur des Kartenprogrammes und die Möglichkeiten der Skia-API müssen analysiert werden. Danach muss eine Untermenge des Kartenrenderers definiert werden, welche in OpenGL implementiert werden soll. Komplizierte Objekte, deren Darstellung zu viel Aufwand erfordern, können dabei zunächst weggelassen werden um möglichst bald einen lauffähigen Prototyp zum Testen und Vergleichen zu erhalten. Verschiedene grafisch-mathematische Probleme wie Antialiasing, Polygon-Triangulierung, Projektion und Clipping müssen berücksichtigt werden, gegebenenfalls sind eigene Implementierungen notwendig wenn die entsprechende Funktionen in OpenGL fehlen. Das Ergebniss soll am Ende in einem Vergleich mit dem bisherigen Rendering sowie anhand von Benchmarks prsentiert werden.


Projekt 2.3


Das in Aufgabe 2.1 beschriebene Kartenprogramm existiert derzeit nur als Java-Implementierung für die Android-Plattform von Google. Das mapsforge Projekt richtet sich aber grundsätzlich auch an andere Plattformen, langfristig sollen insbesondere iPhone (Apple) und Symbian OS (Nokia) unterstützt werden. Dazu ist es erforderlich, vorhandenen Programmcode zu portieren und gegebenenfalls Änderungen an der Architektur vorzunehmen, um auf die Eigenheiten anderer Plattformen einzugehen. Die bereits entwickelten Binärformate für die Kartendaten und Zeichenalgorithmen sollen soweit wie möglich übernommen werden, um eine größtmögliche gemeinsame Codebasis beizubehalten und doppelte Implementierungsarbeit zu verhindern.

Ziel dieses Projektes ist die Portierung des Kartenprogrammes auf die iPhone-Plattform von Apple.

Ablauf:
Zunächst muss das vorhandene Kartenprogramm analysiert und verstanden werden. Dann soll festgelegt werden, welche Teilemenge des Renderers portiert werden soll, gegebenenfalls können einige Teile zunächst weggelassen werden um den Fokus auf das Wesentliche nicht zu verlieren. Die iPhone-Plattform als solche muss untersucht werden, insbesondere die Möglichkeiten zum Zeichnen von grafischen Objekten und Anzeigen von mehreren Bildern in Form einer Karte. Es soll geklärt werden, ob ein Crosscompiler oder ein automatisiertes Tool zum Ãœbersetzen des Java-Codes in Objective-C-Code sinnvoll einsetzbar ist. Im Anschluss daran erfolgt die eigentliche Portierungsarbeit, gegebenenfalls unter Zuhilfenahme von entsprechenden Konvertierern. Am Ende des Projektes werden die Erfahrungen aus der Portierung sowie ein direkter Vergleich mit dem Android-Client bezüglich Renderingqualität und Geschwindigkeit präsentiert.