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.