Not set pdfsubject - AG Digital Humanities

Transcrição

Not set pdfsubject - AG Digital Humanities
Friedrich Alexander Universität Erlangen Nürnberg
Technische Fakultät
Lehrstuhl für Künstliche Intelligenz
Prof. Dr.-Ing. Günther Görz
Autarke mobile
Echtzeit-Fahrplannavigation
Studienarbeit
Eingereicht von
Matrikelnummer
Studiengang
Betreuer
Christian Schmidt
15. August 2007
21104300
Informatik (Dipl.)
Prof. Dr.-Ing. Günther Görz
Dr.-Ing. Bernd Ludwig
I
Ich versichere, dass ich die Arbeit ohne fremde Hilfe und ohne Benutzung anderer als der
angegebenen Quellen angefertigt habe und dass die Arbeit in gleicher oder ähnlicher Form
noch keiner anderen Prüfungsbehörde vorgelegen hat und von dieser als Teil einer Prüfungsleistung angenommen wurde. Alle Ausführungen, die wörtlich oder sinngemäß übernommen
wurden, sind als solche gekennzeichnet.
Erlangen, den 15. August 2007
Inhaltsverzeichnis
1 Einleitung
1
1.1 Zielsetzung der Arbeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1.2 Gliederung der Arbeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
2 Analyse
2
2.1 Anforderungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
2.2 Existierende Lösungsansätze . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
2.2.1
Online . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
2.2.1.1
Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
2.2.1.2
Wireless Application Protocol - WAP . . . . . . . . . . . . .
3
2.2.1.3
Short Message Service - SMS . . . . . . . . . . . . . . . . .
3
2.2.1.4
Diplomarbeit von Tobias Schwab . . . . . . . . . . . . . . .
3
2.2.2
Offline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
2.2.3
Navigationsgeräte . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
2.3 Lösungsansatz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
2.3.1
Vorteile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
2.3.2
Nachteile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
2.4 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
3 Entwurf
5
3.1 Routensuche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.1
5
Arten von Kanten . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
3.1.1.1
5
Busverbindungen . . . . . . . . . . . . . . . . . . . . . . . .
Inhaltsverzeichnis
III
3.1.1.2
Fußverbindungen . . . . . . . . . . . . . . . . . . . . . . . .
5
3.1.1.3
Strafverbindungen . . . . . . . . . . . . . . . . . . . . . . .
6
Arten von Graphen . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
3.1.2.1
Einfache Graphen . . . . . . . . . . . . . . . . . . . . . . .
6
3.1.2.2
Straf-Graphen . . . . . . . . . . . . . . . . . . . . . . . . .
6
Vergleich von Graphen . . . . . . . . . . . . . . . . . . . . . . . . . .
6
3.1.3.1
Normaler Graph ohne Fußverbindungen . . . . . . . . . . .
7
3.1.3.2
Normaler Graph mit Fußverbindungen . . . . . . . . . . . .
7
3.1.3.3
Strafgraph ohne Fußverbindungen . . . . . . . . . . . . . . .
8
3.1.3.4
Strafgraph mit Fußverbindungen . . . . . . . . . . . . . . .
8
3.2 Visualisierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
3.1.2
3.1.3
4 Verwendete Technologien
4.1 Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.1
9
9
Java 2 Micro Edition . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
4.2 Bluetooth - BT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
4.2.1
Sicherheit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
4.3 Global Positioning System - GPS . . . . . . . . . . . . . . . . . . . . . . . .
10
4.3.1
Messgrößen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
4.3.2
Satelliten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
4.3.3
Genauigkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
4.3.3.1
Ausblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
Funktionsweise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
4.4 KML - Keyhole Markup Language . . . . . . . . . . . . . . . . . . . . . . .
12
4.5 Bezug der Technologien zur Arbeit . . . . . . . . . . . . . . . . . . . . . . .
12
4.3.4
5 Implementierung
13
5.1 Architektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.1.1
13
Visualisierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
5.1.1.1
14
MapProducer . . . . . . . . . . . . . . . . . . . . . . . . . .
Inhaltsverzeichnis
5.1.2
IV
Routensuche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
5.2 Systemanforderungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
5.2.1
Vorteile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
5.2.2
Probleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
5.3 Verwendete Methoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
5.3.1
Dijkstra-Algorithmus . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
5.3.1.1
Arbeitsprinzip . . . . . . . . . . . . . . . . . . . . . . . . .
16
5.3.1.2
Rekonstruktion des Pfades . . . . . . . . . . . . . . . . . . .
17
5.3.1.3
Probleme . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
5.3.1.4
Prioritätswarteschlange . . . . . . . . . . . . . . . . . . . .
17
5.3.1.5
Psudocode . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
5.3.1.6
Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
5.3.2
Damerau-Levenshtein-Stringabstand . . . . . . . . . . . . . . . . . .
21
5.3.3
Darstellung der Zeit . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
5.3.4
Fahrpläne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
5.3.5
Kartendaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
5.3.5.1
Referenzsystem . . . . . . . . . . . . . . . . . . . . . . . . .
22
5.3.6
Entwicklungsumgebung . . . . . . . . . . . . . . . . . . . . . . . . . .
23
5.3.7
Probleme der J2ME API . . . . . . . . . . . . . . . . . . . . . . . . .
23
5.3.8
Objektorientierung vs. Performance . . . . . . . . . . . . . . . . . . .
24
5.3.9
Optimierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
5.3.10 Zugriff auf externe Daten . . . . . . . . . . . . . . . . . . . . . . . . .
26
5.3.10.1 Dateien im Dateisystem . . . . . . . . . . . . . . . . . . . .
26
5.3.10.2 Gefahren und Probleme bei externen Daten . . . . . . . . .
26
5.3.10.3 Struktur im Dateisystem . . . . . . . . . . . . . . . . . . . .
29
5.3.10.4 Recordstores . . . . . . . . . . . . . . . . . . . . . . . . . .
29
Inhaltsverzeichnis
V
6 Evaluierung
30
6.1 Routensuche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
6.1.1
Fall 1
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
6.1.2
Fall 2
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
6.1.3
Fall 3
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
6.1.4
Fall 4
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
6.1.5
Fall 5
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
6.1.6
Zusammenfassung - Routensuche . . . . . . . . . . . . . . . . . . . .
33
6.2 Interaktivität . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
6.2.1
Routensuche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
6.2.2
Damerau-Levenshtein . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
6.2.3
Zusammenfassung - Interaktivität . . . . . . . . . . . . . . . . . . . .
34
6.3 Bildschirmausschnitte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
6.4 Kritische Betrachtung der Arbeit und Ausblick . . . . . . . . . . . . . . . . .
35
6.4.1
Lösungsansatz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
6.4.2
Hardwareanforderungen . . . . . . . . . . . . . . . . . . . . . . . . .
35
6.4.3
Modellierung der Fahrpläne . . . . . . . . . . . . . . . . . . . . . . .
35
6.4.3.1
Verspätungen . . . . . . . . . . . . . . . . . . . . . . . . . .
35
Erreichte Ziele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
6.4.4.1
Zielführung . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
6.4.4.2
Parametrierung . . . . . . . . . . . . . . . . . . . . . . . . .
35
6.4.4.3
Suchalgorithmen . . . . . . . . . . . . . . . . . . . . . . . .
35
6.4.5
Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
6.4.6
GPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
6.4.7
Analyse und Design . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
6.4.4
7 Ausblick und Zusammenfassung
37
7.1 Mögliche Erweiterungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
7.2 Persönliches Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38
7.3 Anhang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38
Literatur
39
1. Einleitung
In Zeiten des Klimawandels und steigender Kraftstoffkosten geht die Entwicklung der individuellen Mobilität früher oder später wieder in Richtung der öffentlichen Verkehrsmittel. Da
diese aber nicht so flexibel sind wie das eigene Kraftfahrzeug und die Auskunft per Internet,
Taschen- oder Aushängefahrplan umständlich oder bei Bedarf nicht verfügbar ist, besteht
meine Idee darin, eine Fahrplanauskunft für Mobiltelefone zu entwickeln. Dieses soll jederzeit
ohne laufenden Kosten einsatzbereit sein und dem Benutzer Hilfestellung bei der Zielsuche
und Positionsbestimmung geben.
1.1
Zielsetzung der Arbeit
Das Ziel dieser Arbeit ist das Konzept, der algorithmische Hintergrund und letztendlich
ein lauffähiges Implementierungsgerüst einer selbständig, das heißt ohne Netzwerkanbindung
und Server, operierenden Fahrplanauskunft für mobile Geräte.
1.2
Gliederung der Arbeit
Diese Studienarbeit ist in folgende Kapitel gegliedert
• Konzept und Grobentwurf
• Feinentwurf
• Algorithmische Details
• Probleme in mobiler Umgebung
2. Analyse
Das zu lösende Problem besteht darin, den Benutzer des Systems, unter bestmöglicher Erfüllung von Randbedingungen, von einem gewünschten Startpunkt mit Hilfe von öffentlichen
Verkehrsmitteln und zu Fuß zu einem Ziel zu führen.
Diese Randbedinungen sind vor allem:
• frühestmögliche Ankunftszeit
• spätestmögliche Abfahrtszeit
• wenige Umstiege
• geringer Fahrpreis durch Wahl weniger Tarifzonen
Dabei soll für die Benutzung öffentlicher Verkehrsmittel auf parametrierbare Fahrplandaten
zurückgegriffen werden.
Für die Wege zu Fuß sollen zusätzlich geographische Daten (unter anderem Haltepunkte
öffentlicher Verkehrsmittel) berücksichtigt werden. Zur erweiterten Benutzerführung ist ein
Bluetooth-(BT)-GPS-Empfänger vorgesehen. Der Benutzer soll Point of Interests (POI)1
angezeigt bekommen, um zu diesen navigieren zu können und sich an deren Position zu
orientieren.
2.1
Anforderungen
Das Programm soll dem Benutzer interaktiv helfen, sein Ziel zu erreichen, das heißt das Programm soll auf die Aktionen des Benutzers reagieren (Anzeige von Position und Richtung).
Die Grundfunktionalität soll ohne Benutzung eines Kommunikationsnetzes, wie Mobilfunknetz oder Internet, zugänglich sein.
1
Point Of Interest - Punkt des Interesses / interessanter Punkt
2.2. Existierende Lösungsansätze
2.2
3
Existierende Lösungsansätze
Es gibt schon einige ähnliche Ansätze zur mobilen Navigation in Echtzeit. Jedoch unterscheiden sich diese von der hier aufgeführten Aufgabenstellung, wie im folgenden zu sehen
ist.
2.2.1
Online
Alle hier aufgeführten Lösungen arbeiten nicht autark, sondern benötigt ein Netzwerk und
einen Server.
2.2.1.1
Internet
Im Internet sind viele lokale Auskunftssysteme der einzelnen Verkehrsbetriebe vorhanden,
jedoch gibt es auch deutschlandweite Suchen [DB07]. Trot der Fähigkeit HTML darzustellen, steht diese Möglichkeit nicht auf allen mobilen Geräten zur Verfügung, da Provider den
Zugriff meist auf bestimmte Seiten begrenzen.
Desweiteren habe ich persönlich die Erfahrung gemacht, dass einige Wege nicht angezeigt
werden, obwohl diese vorhanden und besser sind als die angebotenen Ergebnisse.
2.2.1.2
Wireless Application Protocol - WAP
Die meisten öffentlichen Verkehrsbetriebe bieten heutzutage eine Weboberfläche für mobile
Geräte an, welche aber oft nur eine abgespeckte Version des Internet-Frontends ist. Meist ist
der Zugriff vom Mobilgerät auf das WAP mit laufenden Providerkosten verbunden. [VGN07]
2.2.1.3
Short Message Service - SMS
Diese Variante ist ähnlich der WAP Veriante, nur dass hier keine Oberfläche angeboten wird,
sondern es werden Textnachrichten mit spefizischer Syntax übertragen. Auch diese Variante
ist in den meisten Fällen mit Kosten verbunden. [VGN07]
2.2.1.4
Diplomarbeit von Tobias Schwab
Im Rahmen der Aufgabenstellung dieser Studienarbeit wurde eine Diplomarbeit von Tobias
Schwab angefertig, welche die Aufgabenstellung etwas anders auslegt als diese Studienarbeit.
Dazu benutzt er ein Client-Server-Konzept, wobei der Server für die Routensuche und der
Client für die Darstellung und Zielführung zuständig ist.
Diese Konzept ist von einem Server und der Kommunikationsverbindung zu diesem abhängig.
2.2.2
Offline
Inzwischen gibt es einige Offline-Versionen für PDAs2 .
Wie zum Beispiel
2
Personal Digital Assistant - tragbarer Minicomputer
2.3. Lösungsansatz
4
• VRS - Verkehrsverbund Rhein-Sieg [VRS07]
• VBB - Verkehrsverbund Berlin-Brandenburg [VBB07]
Ein Vergleich oder weitere Aussagen sind mir nicht möglich, da es an einem entsprechenden System zum Ausführen fehlt. Laut Betreiber handelt es sich um System zum offline
Planen der Fahrten. Diese Systeme scheinen teilweise autark zu arbeiten, jedoch sind sie in
gewünschtem Funktionsumfang nur für spezielle PDAs verfügbar.
2.2.3
Navigationsgeräte
Navigationsgeräte sind meist kleine Computer, welche sich zur Navigation auf Strassenkarten
eignen. Inzwischen gibt es auch Varianten für PDA und Mobiltelefon. Es sind keine Informationen über Navigationssysteme auffindbar, welche öffentliche Verkehrsmittel einbeziehen[Tom07].
2.3
Lösungsansatz
Bei dieser Arbeit werden alle Daten im mobilen Gerät gespeichert:
• das komplette Benutzerinterface und Logik in einem Programm
• Fahrplandaten in parametrierbare Dateien
• Geographische Informationen zu Haltestellen und POIs
• Kartendaten zur Visualisierung
2.3.1
Vorteile
• keine laufenden Kosten durch WAP- oder WWW-Verbindung
• Unabhängigkeit von Onlinediensten
• Unabhängigkeit von Serverlast und Netzgeschwindigkeit
2.3.2
Nachteile
• regelmäßige Aktualisierung nötig (vor allem der Fahrpläne)
• alle Berechnungen werden lokal durchgeführt, was eventuell zu hohen Rechenzeiten und
damit hohen Reaktionszeiten auf Benutzereingaben führt
• mobiles Gerät muss recht hohe Mindestanforderungen(Speicher, Rechenleistung, Display) erfüllen, damit das Programm überhaupt lauffähig ist
2.4
Zusammenfassung
Das Ziel der Studienarbeit ist ein Fahrplanauskunftssystem für öffentliche Verkehrsmittel. Die
Zielgruppe dieses Systems sind Fahrgäste lokaler öffentlicher Verkehrsmittel mit Mobilgerät.
Die Benutzung erfolgt (vorwiegend) offline auf Mobilgeräten, wie Handys oder PDAs.
3. Entwurf
3.1
Routensuche
Als Abstraktion des Problems der Verbindungssuche von einem Startpunkt zu einem Zielpunkt auf vorgegebenen Strecken bieten sich Graphen im Kontext der Graphentheorie[Gra07]
an. Das ermöglicht die Benutzung gründlich erforschter Algorithmen.
Dabei werden die geographischen Punkte(zum Beispiel Haltestellen) durch Knoten, die Verbindungen zwischen diesen durch Kanten und die zeitliche Entfernung durch die Gewichte
des Graphen abgebildet.
Da bei Benutzung von öffentlichen Verkehrsmitteln im Allgemeinen die Ankunftszeiten zwischen zwei Punkten nicht symmetrisch sind, wird ein gerichteter Graph abstrahiert. Zwischen zwei Punkten können mehrere Verbindungen in jede der beide Richtung existieren.
Im Gegensatz zu üblichen Graphen, sind die Gewichte der Kanten zum Teil abhängig vom
Zeitpunkt ihrer Betrachtung, da zu unterschiedlichen Zeitpunkten die Verweildauer zwischen
zwei Knoten aufgrund der Fahrpläne variiert.
3.1.1
Arten von Kanten
3.1.1.1
Busverbindungen
Bei öffentlichen Verkehrsmitteln gibt es Kanten, welche Verbindungen repräsentieren. Deren
Gewichte sind abhängig vom Zeitpunkt ihrer Betrachtung. Sie bilden das Herzstück der
Routenplanung.
3.1.1.2
Fußverbindungen
Es ist auch möglich, zwei Punkte mit Fußverbindungen zu verbinden, wobei das Gewicht
dieser Kante nicht vom Zeitpunkt abhängig ist, sondern nur vom geographischen Abstand
der zwei Punkte und von der Schrittgeschwindigkeit des Benutzers. Diese Daten müssen
nicht explizit im Graph gespeichert werden, sondern können zur Laufzeit berechnet werden
3.1. Routensuche
6
um Speicherplatz zu sparen. Da jeder Punkt mit jedem verbunden werden müsste, würde
dies einen Aufwand von
N = n(n − 1) ∈ O(n2 )
bedeuten, das heißt bei Verdoppelung der Knoten würde sich die Anzahl der Kanten näherungsweise vervierfachen.
Die Geographische Entfernung ist gerade für städtische Gebiete nicht ideal, da der Benutzer kaum auf direktem Wege gehen kann. Da viele Städte rechteckig angelegt sind, ist als
Entfernungsmaß die Manhatten-Distanz sinnvoll. Sie addiert einfach die rechtwinklig aufeinander stehenden Komponenten. Wenn man davon ausgeht, dass diese Komponenten von Ost
nach West und Nord nach Süd verlaufen addiert man einfach geographische Längen- und
Breitenänderung.
3.1.1.3
Strafverbindungen
Um bei der Routensuche Umstiege einzuschränken, müssen die Umstiege mit Strafen belegt
werden (siehe: 3.1.2.2). Umstiege gibt es nur innerhalb der gleichen Bushaltestelle zwischen
unterschiedlichen Linien.
Da die geographische Entfernung zwischen zwei Bushaltestellen immer 0 ist, würde ein Fußmarsch mit der Entfernung 0 und damit der Zeitdauer 0 die Strafverbindungen zunichte
machen.
3.1.2
Arten von Graphen
3.1.2.1
Einfache Graphen
Bei dieser Art von Graphen sind zwei Haltestellen durch alle Linien miteinander verbunden, die zwischen ihnen verkehren. Abhängig von ihrer Entfernung und dem Wunsch nach
Betrachtung von Fußverbindungen gibt es noch eine Fußverbindung zwischen den beiden
Haltestellen.
3.1.2.2
Straf-Graphen
In einem Graphen gibt es nur Gewichte an Kanten und nicht an Knoten. Da Strafen für
das Umsteigen innerhalb einer Haltestellen und damit an Kanten erfolgen müßten, werden
Knoten in diesem Fall als 2er-Tupel (Haltestelle, Buslinie) modelliert. Somit wird beim Umsteigen eine Kante zwischen Knoten mit der selben Haltestellen aber unterschiedlichen Linien
durchlaufen. Diese Kante (und damit der Umstieg) läßt sich wie gewünscht gewichten.
Dies lässt die Anzahl der Knoten und Kanten im Graph jedoch enorm ansteigen.
3.1.3
Vergleich von Graphen
Um sich die Größe der einzelnen Typen von Graphen (normaler Graph/Strafgraph, mit/ohne Fußverbindungen) besser vorstellen zu können, zeigt der folgende Abschnitt ein simples
Beispiel mit drei Knoten und 2 Linien zwischen diesen Knoten.
Zahlen an den Kanten stehen für die Buslinie.
F steht für Fußmarsch mit der Zeit in Klammern.
P steht für Strafkante mit der Zeit in Klammern.
Gut zu erkennen ist die Symmetrie bei Strafkanten und Fußmärschen.
3.1. Routensuche
3.1.3.1
7
Normaler Graph ohne Fußverbindungen
Erlangen Altstadtmarkt
293
Erlangen Martin-Luther-Platz
293287
Erlangen Schlachthof
Der Graph mit den Buslinien Erlangens, ohne Nightliner und Überlandbusse, hat 160 Knoten
und 1758 Kanten.
3.1.3.2
Normaler Graph mit Fußverbindungen
Erlangen Schlachthof
F(12 min)
293
287
F(12 min)
Erlangen Martin-Luther-Platz
F(5 min)
F(18 min)
F(18 min)
293 F(5 min)
Erlangen Altstadtmarkt
Der Graph mit den Buslinien Erlangens, ohne Nightliner und Überlandbusse, hat 160 Knoten
und 5578 Kanten, wobei einzelne Fußmärsche kleiner als 5000m sind.
3.2. Visualisierung
3.1.3.3
8
Strafgraph ohne Fußverbindungen
[Erlangen Martin-Luther-Platz,287]
P(2 min)
[Erlangen Altstadtmarkt,293]
P(2 min)
293
[Erlangen Martin-Luther-Platz,293]
287
293
[Erlangen Schlachthof,293]
P(2 min) P(2 min)
[Erlangen Schlachthof,287]
3.1.3.4
Strafgraph mit Fußverbindungen
[Erlangen Schlachthof,293]
F(18 min)
F(18 min)
[Erlangen Altstadtmarkt,293]
P(2 min)
F(12 min)
F(5 min)
F(12 min)
F(18 min)
F(5 min)
F(5 min)
F(18 min)
F(5 min)
F(12 min)
293
F(12 min)
293 P(2 min)
[Erlangen Martin-Luther-Platz,293]
F(12 min)
[Erlangen Schlachthof,287]
F(12 min)
F(12 min)
F(12 min)
P(2 min)
P(2 min)
287
[Erlangen Martin-Luther-Platz,287]
Die Anzahl der Kanten wächst in dieser Konfiguration extrem an.
Knoten, zwischen denen es Strafkanten gibt, besitzen keine Fußmärsche, da diese das Kantengewicht 0 hätten und damit die Strafkanten immer unterbieten würden.
3.2
Visualisierung
Da graphische Visualisierung zumeist intuitiver ist als textuelle Ausgabe und die meisten
modernen Mobilgeräte hochauflösende, farbige Grafikausgabe unterstützen, werden die Ergebnisse graphisch dargestellt.
Das Herzstück bildet eine (Stadt-) Karte, welche zur Orientierung und Visualisierung dient.
Alle anderen geographischen Darstellungen bauen auf diese Karte und deren Koordinatensystem auf.
4. Verwendete Technologien
4.1
Java
Das Projekt Java wurde von Sun Microsystems Anfang der 1980er Jahre ins Leben gerufen.
Dabei bezeichnet Java sowohl eine Technologie als auch eine Programmiersprache, welche eng
an diese Technologie geknüpft ist. Ziele dieses Projektes waren eine Sprache zu erschaffen,
welche leichte Erlernbarkeit (durch Ähnlichkeit der Syntax zu C/C++) bot, und eine virtuelle Maschine1 , welche eine abstrakte Plattform für Java-Programme bietet. Dabei wird der
Quellcode nicht wie üblich in Maschinencode umgewandelt, sondern in ByteCode, welcher
von der virtuellen Maschine ausgeführt wird. Die virtuelle Maschine bietet Plattformunabhängigkeit, da nicht das Programm auf die Maschine, sondern nur die virtuelle Maschine
auf die reale Maschine angepasst werden muss. Des weiteren bietet diese virtuelle Maschine
den Vorteil, Zugriffe nach Außen überwachen und reglementieren zu können, auch bekannt
als sogenanntes Sandbox-Prinzip. Neben der Programmiersprache bietet Java eine API2 für
Grundfunktionalitäten und häufig verwendete Strukturen. Seit Java2 wird Java in 3 verschiedene Bereiche aufgeteilt:
• J2EE (Enterprise Edition) Java für das Serverumfeld
• J2SE (Standard Edition) Java für Desktop Rechner
• J2ME (Micro Edition) Java für Kleingeräte
Dabei stellt J2EE die größte und J2ME die kleinste API zur Verfügung.
1
2
Auch Virtual Machine im Englischen; eine Plattform, welche in Software statt in Hardware existiert
Application Programming Interface = Programmierschnittstelle
4.2. Bluetooth - BT
4.1.1
10
Java 2 Micro Edition
Diese Variante von Java ist speziell für eingebettete Systeme (embedded systems) gedacht.
Diese Systeme zeichnen sich im Allgemeinen durch geringe Ressourcen (Rechenleistung, Arbeitsspeicher, usw.) aus. Ursprünglich war J2ME für den Einsatz in unterschiedlichsten Kleinund Kleinstgeräten gedacht, jedoch beschränkt sich die weite Verbreitung auf Geräte mit hoher Software-Wiederverwendung durch hohe Stückzahlen, insbesondere Mobiltelefone und
PDAs.
Innerhalb von J2ME gibt es die Konfiguration“, welche vor allem Hardwareanforderun”
gen festlegt und Profile“, welche die Benutzung zusätzlicher Funktionen wie Dateisystem,
”
Adressbuch und Low-Level Funktionalität beschreibt. Konfigurationen und Profile sind abwärtskompatibel.
4.2
Bluetooth - BT
Bluetooth ist eine funkbasierte Netzwerktechnologie, welche Mitte der 1990er Jahre entwickelt wurde. BT ist im Gegensatz zu Wireless LAN3 (WLAN) für kurze Distanzen und
geringere Geschwindigkeiten ausgelegt. Jedoch besitzt BT verschiedene vordefinierte Funktionsschemata (BT-Profile), welche die Kommunikation zwischen verschiedenen Geräten normiert und vereinfacht.
BT-Netzwerke sind ad-hoc Netzwerke, das heißt sie arbeiten dezentral und müssen nicht
administriert werden, sondern administrieren sich selbst, wenn durch mehrere Geräte eine
Kommunikation zustandekommt. Der Name leitet sich vom dänischen König Harald Blauzahn ab, welcher einst für Einigkeit und Verbundenheit in Skandinavien sorgte. BT-Geräte
haben meist eine sehr geringe elektrische Leistung, was sie sparsam macht und dazu führt,
dass sie durch einen Akku für längere Zeit elektrisch unabhängig sind. BT kommt heutzutage vor allem in Mobiltelefonen, kabellosen Headsets, USB-Adaptern, Eingabegeräten und
GPS-Empfängern zum Einsatz. Andere Einsatzmöglichkeiten wie in Spielzeug, Haustechnik
und in industrieller Anwendung gibt es auch in Ansätzen.
4.2.1
Sicherheit
Wie bereits erwähnt werden BT-Netzwerke nicht verwaltet und es können sich verschiedene
Geräte zu einem Netzwerk zusammenschließen um miteinander kommunizieren. Das bietet
auch Raum für unerwünschten Datenzugriff von außerhalb. Aus diesem Grund gibt es die
Möglichkeit einer PIN4 -Authentifizierung der Teilnehmer untereinander. Zur Kommunikation
ist das Wissen über die ID5 im Netzwerk von Nöten, welche sich jedoch Erfragen lässt, solange
diese Funktion nicht ausgeschaltet ist.
4.3
Global Positioning System - GPS
GPS ist ein satellitengestütztes Ortungssystem. Entwickelt und anfänglich eingesetzt wurde GPS vom US-amerikanischen Militär. Anfangs wurde das Signal künstlich verfälscht um
3
Local Area Network - Netzwerktechnologie für kurze Distanzen
Personal Identification Number - Geheimzahl
5
Eindeutiger Bezeichner
4
4.3. Global Positioning System - GPS
11
feindliche und zivile Nutzung unpräzise zu machen. Diese Verfälschung wurde im Jahr 2000
aufgehoben. Damit lassen sich bei günstigen Bedingungen für jedermann Genauigkeiten von
10m erreichen.
Von großer Bedeutung ist GPS seit langem in der Schifffahrt. Durch immer kleinere Empfänger und größere Stückzahlen ist der Markt für die Nutzung von GPS in den letzten Jahren jedoch sehr stark angewachsen. Vor allem der Markt der Navigationssysteme für Autos
boomt.
4.3.1
Messgrößen
GPS ist sowohl in der Lage sphärische Koordinaten6, als auch Höhenangaben, Geschwindigkeit, Kurs und Uhrzeit bereitzustellen. Voraussetzung dafür ist, dass genügend Satelliten
sichtbar“ sind.
”
4.3.2
Satelliten
Zur Bestimmung der Koordinaten reichen 3 Satelliten aus, zur Bestimmung der Höhe ist ein
weiterer nötig. Insgesamt umkreisen die Erde 24 Satelliten von denen maximal 12 sichtbar“
”
sind. Die Bahnen sind nicht geostationär7 .
4.3.3
Genauigkeit
In der Regel kann eine Genauigkeit von wenigen Metern erreicht werden. Jedoch hängt dies
stark von Umwelt- und Umgebungseinflüssen ab. So ist in einer engen Straße mit hohen Häusern die Sicht auf die Satelliten begrenzt. Auch kann das Signal durch Reflexion an den Mauern verfälscht werden. Ebenso beeinflussen Gebirge, Wald und Niederschlag, sowie starker
Nebel die Qualität des Empfangs und damit die Genauigkeit. Die Genauigkeit ist desweitern
von der entsprechenden Hardware (und damit eingesetzten Technologie) abhängig. So erzielen sehr teure, professionelle Geräte weit aus höhere Genauigkeiten als Consumer-Produkte.
Außerdem sind nicht immer gleich viele Satelliten zu sehen, was zu einer Beeinflussung der
Genauigkeit führt. In Gebäuden ist der Empfang nur unter sehr günstigen Umständen, wie
zum Beispiel bei gutem Wetter am Fenster möglich.
4.3.3.1
Ausblick
Es gibt inzwischen erste Ansätze, Unterbrechungen der Satellitenverbindung auszugleichen.
Voraussetzung dafür ist, dass Position und Geschwindigkeit schon einmal bestimmt wurden.
Danach kann man mit Hilfe von Beschleunigungssensoren die Geschwindigkeit aktualisieren
und mit dieser wiederum die Position. Voraussetzung dafür wären zum Beispiel faseroptische
Miniaturkreisel zur Beschleunigungsmessung.
6
7
geographische Länge und Breite
geostationär= von der Erde aus betrachtet, ändert sich die Position am Himmel nicht
4.4. KML - Keyhole Markup Language
4.3.4
12
Funktionsweise
Die Satelliten kennen ihre Position und sind jeweils mit einer Atomuhr ausgerüstet, welche
untereinander synchronisiert wird. Jeder von ihnen sendet zyklisch ein Signal mit der Uhrzeit
und der Position aus. Der Empfänger empfängt diese Signale, kann die Laufzeitunterschiede
messen und damit die Entfernungen von den Satelliten berechnen. Nun kann der Empfänger
durch Trilateration8 seine Position auf der Erdoberfläche oder bei genügender Anzahl von
Satelliten auch im Raum bestimmen.
4.4
KML - Keyhole Markup Language
KML ist eine auf XML9 basierende Sprache zum Austausch geographischer Informationen.
In dieser Arbeit wird KML dazu eingesetzt um geographische Punkte, wie Bushaltestellen
und POIs zu speichern.
J2ME besitzt im Gegensatz zu J2SE keine Unterstützung für XML. Aus diesem Grund mußte
ein eigener Parser10 geschrieben werden, welcher aber keine Syntaxüberprüfung durchführt
und nur Placemark -Tags11 herausfiltert.
”
”
4.5
Bezug der Technologien zur Arbeit
Zur Positionsbestimmung des Benutzers wird ein GPS-Empfänger verwendet, welcher über
BT mit dem Mobilgerät kommuniziert. Die eigentliche Anwendung mit Visualisierung, Routenberechnung und GUI12 wird in Form eines Java MIDLets implementiert.
8
Entfernungsmessung im Dreieck
Extensible Markup Language grammatikalisch wohldefinierte Strukturbeschreibungssprache hierarchisch
strukturierter Informationen
10
Programm für wohldefinierte Zerlegungen einer Eingabe
11
Erkennungsmarke
12
Graphical User Interface = Grafische Benutzeroberfläche
9
5. Implementierung
Dieses Kapitel beschäftigt sich mit der Entwicklung von der Idee zum lauffähigen Programm.
5.1
Architektur
Das Programm besteht aus zwei Hauptkomponenten, der Routensuche und der Visualisierung. Eine weitere Komponente wird diese beiden zusammenführen und als GUI dienen.
5.1.1
Visualisierung
javax.microedition.lcdui
map.painting
map.producer
MapGrid
Canvas
protected void paint(Graphics g)
public void centerTo(double longitude, double latitude)
<<realize>>
<<interface>>
0..*
CommandListener
0..*
<<interface>>
1
0..*
KMLPainter
<<realize>>
MapProducer
public MapImage getMap(double x, double y, int zoom, boolean async)
public MapImage getMap(int x, int y, int zoom, boolean async)
public int getWidth()
public int getHeight()
0..*
<<realize>>
<<realize>>
<<interface>>
CoordinatePainter
<<realize>>
public void paint(Graphics g, MapGrid mg)
GoogleFileReader
<<interface>>
coordinates
RepaintListener
<<realize>>
<<interface>>
<<realize>>
CoordinateTransformer
public double deg2CoordX(double x)
public double deg2CoordY(double y)
public double coord2DegX(double x)
public double coord2DegY(double y)
0..*
VariantCoordinatePainter
MapImage
<<realize>>
public Image getImage()
public void setImage(Image image)
public MapImage getRelative(int x, int y)
<<realize>>
LinePainter
private CoordinatePainter painter
public void setPainter(VariantCoordinatePainter painter)
0..*
Mercator
graph
0..*
Google
Edge
SourceEdge
public Node getSink()
public Node getSource()
Node
Dabei ist die Klasse MapGrid die zentrale Komponente der Darstellung. Sie ist ein Canvas[Can07],
das heißt ein Element für Low-Level-Darstellung und Low-Level-Tastatur-Handling. Der
Grundgedanke besteht darin, mehrere Kartenstücke nahtlos miteinander zu verknüpfen, so
dass der Eindruck einer großen Karte entsteht. Diese Kartenstücke liefert der MapProducer,
5.1. Architektur
14
welcher zu jedem MapGrid gehört. Scrollt der Benutzer per Tastatur, so werden die Karten
verschoben gezeichnet, solange bis Karten aus der Anzeige herausfallen“ und neue Karten
”
angefodert und gezeichnet werden müssen.
5.1.1.1
MapProducer
Der MapProducer ist ein Interface zum Einlesen von Kartenmaterial. Er gibt jeweils eine Karten zu bestimmten Koordinaten und Zoomstufe zurück, und kann Karten aus dem zugrundeliegenden Raster-Koordinatensystem adressieren um benachbarte Kartenstücke schneller
zu erhalten.
Google
Diese Klasse ist eine Implementierung des Interface MapProducer und beruht auf den Karten
von Google Maps[GMa07]. Diese benutzen eine Variante der Mercator-Projektion, dabei
handelt es sich um eine winkeltreue Projektion des Globus auf eine ebene Karte. Der Ort
der Bilddateien wird in einem parametrierten Pfad hinterlegt.
MapImage
MapImage enthält die gegebenenfalls vorhandenen Bilddaten des Kartenrechtecks sowie deren Koordinaten und Koordinatentransformation. Um eventuelle Ladezeiten zu verkürzen,
ist es dem MapProducer beim Erzeugen eines MapImages erlaubt, das Bildmaterial nach
dem Laden (aysnchron) zu setzen.
Zusätze - Plugins
Mit dem Interface CoordinatePainter lassen sich zusätzliche Grafische Komponenten, wie Anzeige von Koordinaten und ähnliches einbinden. VariantCoordinatePainter und LinePainter
sind die Schnittstellen zur Darstellung von Routen.
KMLPainter Mit der Klasse KMLPainter lassen sich Dateien im Keyhole Markup Language (KML) Format, wie sie zum Beispiel Google Earth benutzt, anzeigen. Somit lassen
sich POIs einfach importieren und mit externen Programmen, wie zum Beispiel Google Earth
bearbeiten.
5.1.2
Routensuche
Wie bereits erwähnt, basiert die Routensuche auf einer Graphensuche in einem Graphen mit
zeitabhängigen Kantengewichten.
5.2. Systemanforderungen
15
graph
Graph
<<interface>>
Edge
Node
public Node[] getNodes()
public Edge[] getOutgoingEdges(Node node)
public void addEdge(SourceEdge edge)
public Node getNode(Busstop busstop, Line line)
protected Node buildNode(Busstop busstop, Line line)
private Busstop busstop
public Line line
graph.fibonacci
public Node getSink()
public long getArrivalTime(long time)
<<realize>>
FootpathEdge
public int timeNeeded
MultistationGraph
FibonacciHeap
public void decreaseKey(HeapData hd, long key)
public void insert(HeapData hd)
public HeapData deleteMin()
<<realize>>
<<interface>>
SourceEdge
PenaltyEdge
HeapData
public Node getSource()
protected Node buildNode(Busstop busstop, Line line)
public Edge[] getOutgoingEdges(Node node)
private final Node n
private long key
<<realize>>
BusstopEdge
<<realize>>
private Line line
private Node source
private Node sink
WrapperEdge
public Line getLine()
public WrapperEdge(Edge e, Node source)
database
<<interface>>
Line
Busstop
public long nextDepartureTime(long time, Busstop busstop)
private String name
Dijkstra
<<realize>>
<<interface>>
PathFinder
public void findShortestPath(long now)
public Object[] trace()
private long[] d
private java.util.Vector nodes
private FibonacciHeap q
private int[] previous
private java.util.Vector lineused
public java.util.Vector hd
coord
<<realize>>
LineImpl
GpsCoordinate
public final double latitude
public final double longitude
public Dijkstra(Graph g, Node start, Node end)
Das Herzstück der Suche ist die Klasse Graph. Dieser ist aus expliziten Kanten von Buslinien und Knoten (Bushaltestellen) aufgebaut. Des weiteren gibt es implizite Kanten zwischen
den Knoten, welche Fußmärsche darstellen. Diese sind jedoch nicht zeitabhängig. Eine Abwandlung des Graphen ist der MultistationGraph, welcher zusätzlich Strafen bei Umstiegen
modelliert. Dies geschieht durch zusätzliche Kanten zwischen Knoten zweier gleicher Bushaltestellen unterschiedlicher Linien.
Eine Linienkante wird aus einer Linie gewonnen, welche wiederum Informationen über die
einzelnen Abfahrtszeiten an den Bushaltestellen hat.
Auf die unterschiedlichen Graphen können Suchalgorithmen angewendet werden, um Routen zu finden. In meiner Studienarbeit wurde nur der Dijkstra-Algorithmus implementiert,
jedoch ist eine Erweiterung um andere Algorithmen, wie zum Beispiel dem A*-Algorithmus
dank Verwendung eines Interfaces kein Problem.
5.2
Systemanforderungen
Da sich Java ME (J2ME) in den letzten Jahren als Standard bei Mobilgeräten durchgesetzt
hat, wird die Implementierung des Programmes als Java MIDlet erfolgen. Als Mindestanforderung der Mobilgeräte wird Connection Limited Device Configuration 1.1 (CLDC 1.1) und
Mobile Information Device Profile 2.0 (MIDP 2.0)[MID07] vorausgesetzt. Für die Benutzung
von Bluetooth muss das Mobilgerät die Java Bluetooth API (JSR-82[JSR07]) unterstützen.
5.2.1
Vorteile
Java MIDlets bieten unter anderem folgende Vorteile:
• weite Verbreitung von Java
• gut dokumentierte API
• “write once run everywhere”-Prinzip
5.3. Verwendete Methoden
16
• aus Software-Engeneering-Sicht gute Sprachkonstrukte (Objektorientierung, keine Sprungmarken, alle Variablen haben expliziten Datentyp)
• freie Entwicklungs- und Testumgebung vorhanden
5.2.2
Probleme
Java MIDlets auf Mobilgeräten bringen jedoch auch einige Probleme mit sich,
zum Beispiel:
• teilweise sehr begrenzte Resourcen auf Mobilgeräten, vor allem auf Mobiltelefonen
• teilweise anderes Verhalten in der Testumgebung als auf Mobilgerät, unter anderem
dadurch, dass auf Emulator mehr Resourcen zur Verfügung stehen
• hardwarebedingt unterstützen nicht alle Geräte alle APIs von Java ME
• herstellerspezifische APIs schränken Portabilität ein
• Security Architecture schützt zwar gegen Schadprogramme, stellt aber Barriere für
vollen Funktionsumfang dar, da der Benutzer durch häufige Sicherheitsabfragen gestört
wird
5.3
Verwendete Methoden
5.3.1
Dijkstra-Algorithmus
Der Klassiker“ unter den Graphensuchalgorithmen ist Dijkstra’s Algorithmus.
”
Prinzipiell sucht er von einem gegebenen Startknoten den kürzesten Pfad zu allen Knoten
in einem gewichteten (und gerichteten) Graphen. Wenn man den Pfad zu einem Zielknoten
sucht, lässt sich die Suche jedoch abkürzen. Kantengewichte und Entfernungen können unendlich groß sein. Wenn es negative Kantengewichte im Graphen gibt, ist nicht garantiert,
dass Dijkstra’s Algorithmus den kürzesten Pfad findet. Wenn es Zyklen mit negativen Kosten
gibt, könnten diese beliebig oft Durchlaufen werden und die Kosten würden immer weiter
abnehmen, was dazu führt, dass es kein Optimum (Minimum) gibt.
5.3.1.1
Arbeitsprinzip
Am Anfang werden alle Knoten, außer der Startknoten mit maximalen (unendlichen) Erreichbarkeitskosten vorbelegt. Der Startknoten ist ohne Kosten (0) erreichbar. Im nächsten
Schritt werden alle Knoten des Graphen mit ihren Erreichbarkeitskosten in eine Prioritätswarteschlange1 eingefügt.
Nun beginnt die Iteration: es wird der Knoten mit den geringsten Erreichbarkeitskosten aus
1
Datenstruktur, in der die Reihenfolge der gespeicherten Elemente durch Prioritäten vorgegeben ist; im
Englischen: Priority Queue
5.3. Verwendete Methoden
17
der Warteschlange geholt (beim 1. mal wird dies der Startknoten sein) und all seine ausgehenden Kanten betrachtet. Jetzt wird betrachtet, ob der jeweilige Weg über diese Kanten zu
den Senken2 -Knoten kürzer ist, als die schon ermittelteten Erreichbarkeitskosten zu diesem
Senken-Knoten. Wenn ja werden die Erreichbarkeitskosten des Senkenknotens aktualisiert, so
dass sich die Erreichbarkeitskosten als Summe der Kosten vom Quellknoten und dem Kantengewicht zum Senkenknoten zusammensetzt. Anschließend wird die Warteschlange mit dem
neuen Wert des Senkenknotens aktualisiert und der Vorgänger des Senkenknotens im Pfad,
also der Quellknoten wird der Senke als Vorgänger zugeordnet. Enthält die Prioritätswarteschlange als kleinsten Wert das Gewicht zum Knoten unendlich, so lässt sich die Schleife
am Anfang abbrechen, da alle weiteren Werte auch unendlich sind, und unendlich nicht zu
einer kürzeren Route führt. Ist der Senkenknoten der Zielknoten, so lässt sich die Schleife
abbrechen, da es keinen kürzeren Weg zum Zielknoten geben wird. Der ermittelte Weg vom
Startknoten ist eine Struktur, bei der jeder Knoten seinen Vorgänger auf dem kürzesten Pfad
zu ihm gespeichert hat.
5.3.1.2
Rekonstruktion des Pfades
Ausgehend vom letzten Zielknoten sucht man sich den Vorgänger des jeweils betrachteten
Knoten, bis man beim Startknoten angelangt ist.
Falls der Zielknoten im Graphen nicht erreichbar ist (Graph ist nicht zusammenhängend bzw.
Kanten haben Gewicht von ∞), hat der Zielknoten keinen Vorgänger und es gibt keinen Pfad.
5.3.1.3
Probleme
Die einzige Aussage, die sich über den Pfad treffen läßt, ist die dass es keinen anderen Pfad
gibt, der kürzer ist. Wenn das Benutzen einer Linie durch eine andere Linie unterbrochen
wird, kommt es zum Problem. Man kommt zum gleichen Zeitpunkt an, wie wenn die Linie
nicht durch eine andere unterbrochen worden wäre. Dieses Verhalten ist jedoch unerwünscht.
Zur Behebung dieses Problems müsste man den Pfad rückwärts durchlaufen und jedes mal
vom Anfang aus schauen, ob die Linie bereits benutzt wurde und dann den Pfad so abkürzen,
dass man die Linie nicht wechselt.
5.3.1.4
Prioritätswarteschlange
Eng im Zusammenhang mit dem Dijkstra-Algorithmus steht die Prioritätswarteschlange. Sie
sorgt dafür, dass die Gewichte der Knoten gespeichert, aktualisiert und der Knoten mit dem
kleinsten Gewicht abgerufen werden kann. Würde man stattdessen eine Liste zur Verwaltung
der Gewichte benutzen, käme man auf eine Laufzeit von O(n2 + m), wobei n die Anzahl der
Knoten und m die Anzahl der Kanten ist. Verwendet man eine Binäre Halde (Binaryheap),
welche die Befehle insert, remove, pop, und decreasekey in logarithmischer Zeit ausführt,
kommt man auf eine Laufzeit von O((m+n) log(n)). Benutzt man eine Fibonacci-Halde, so
verringert sich die Laufzeit für Befehle bei insert und decreasekey auf ein konstantes Maß
und der Dijkstra-Algorithmus hat dann den Aufwand von O(m + n log(n)).
2
Gegenteil einer Quelle
5.3. Verwendete Methoden
5.3.1.5
18
Psudocode
Hier der Pseudocode für den Dijkstra-Algorithmus mit zeitbehafteten Graphen:
// i n i t
f o r ( Node n : graph . getNodes ( ) ) {
i f ( n == s t a r t N o d e ) {
c o s t s [ n ] = st a r t Time ;
} else {
c o s t s [ n ] = MAX VALUE ;
}
prev [ n ] = n u l l ;
queue . enqueue ( n , c o s t s [ n ] ) ;
}// end f o r
// queue a b a r b e i t e n
w h i l e ( ! queue . isEmpty ( ) ) {
Node c u r r e n t = queue . r emo veF ir st Element ( ) ;
f o r ( Edge edge : graph . getOutgoingEdges ( c u r r e n t ) ) {
// V o r z e i t i g e r Abbruch
i f ( edge . s i n k == endNode | | c o s t s [ edge . s o u r c e ] == MAX VALUE) {
return ;
}
// g e t c o s t s from o b s e r v e d timestamp with c e i l bound
edg eCo st s = edge . g e t C o s t s (
c o s t s [ edge . s o u r c e ] , c o s t s [ edge . s i n k ] )
i f ( edg eCo st s < c o s t s [ edge . s i n k ] ) {
//we found a s h o r t e d path t o t he s i n k Node
c o s t s [ edge . s i n k ] = edg eCo st s ;
prev [ edge . s i n k ] = edge . s o u r c e ;
queue . decr ea seK ey ( edge . s i n k , edg eCo st s ) ;
}// e n d i f
}// e n d f o r
}// e n d w h i l e
5.3. Verwendete Methoden
5.3.1.6
19
Beispiel
Dieser Abschnitt zeigt die Arbeitsweise des Dijkstra-Algorithmus an einem kleinen Beispiel.
Ausgehend vom Altstadtmarkt um 10:35 soll der Schlachthof erreicht werden.
Schritt 1
Vorher:
Queue
Altstadtmarkt=10:35
Schlachthof=∞
Martin Luther Platz=∞
Kosten
Altstadtmarkt=10:35
Schlachthof=∞
Martin Luther Platz=∞
Vorgänger
Schlachthof: Martin Luther Platz: Altstadtmarkt: Martin Luther Platz
Fussmarsch(5min)
293(10:53-10:54)
287
293
Altstadtmarkt
10:35
Fussmarsch(20min)
Schlachthof
Es wird der Startknoten betrachtet, und alle seine Kanten werden traversiert.
Schritt 2
Vorher:
Queue
Martin Luther Platz=10:40
Schlachthof=10:55
5.3. Verwendete Methoden
20
Kosten
Altstadtmarkt=10:35
Schlachthof=10:55
Martin Luther Platz=10:40
Vorgänger
Schlachthof: Altstadtmarkt(Fussmarsch)
Martin Luther Platz: Altstadtmarkt(Fussmarsch)
Altstadtmarkt: 10:40
Martin Luther Platz
Fussmarsch(5min)
10:54
287(10:45-10:47) 293(10:54-10:56)
293(10:53-10:54)
Altstadtmarkt
10:35
Fussmarsch
{20min}
Schlachthof
10:55
Es wird der Knoten mit dem geringsten Gewicht aus der Queue geholt, und alle seine Kanten
werden traversiert.
Schritt 3
Vorher:
Queue
Schlachthof=10:47
Kosten
Altstadtmarkt=10:35
Schlachthof=10:47
Martin Luther Platz=10:40
Vorgänger
Schlachthof: Martin Luther Platz(287)
Martin Luther Platz: Altstadtmarkt(Fussmarsch)
Altstadtmarkt: -
5.3. Verwendete Methoden
21
10:40
Martin Luther Platz
Fussmarsch(5min)
10:54
287(10:45-10:47)
293(10:54-10:56)
293(10:53-10:54)
Altstadtmarkt
10:35
Fussmarsch
{20min}
10:47
Schlachthof
10:56
10:55
Es wird der Knoten mit dem geringsten Gewicht aus der Queue geholt. Da dieser Knoten
der Zielknoten ist, terminiert der Algorithmus hier und alle Gewichte und Vorgängerknoten
sind ermittelt.
5.3.2
Damerau-Levenshtein-Stringabstand
Um bei der Eingabe von Haltestellen tolerant gegenüber Eingeabefehlern und Unwissenheit des Benutzers bezüglich vollständiger Haltestellennamen zu sein, wurde der DamerauLevenshtein-Abstand benutzt um die Ähnlichkeit zwischen Eingabe zu Haltestellennamen
zu vergleichen. Der Algorithmus vergleicht zwei Zeichenketten miteinander und ist Ähnlichkeitsmaß für diese. Im Gegensatz zum einfachen Levenshtein-Algororithmus werden Vertauschungen mit berücksichtigt. Bei diesem Algorithmus lassen sich die Kosten für die einzelnen
Operationen unterschiedlich gewichten. Diese Operationen sind Einfügen, Löschen und Vertauschen. Da Haltestellen meist aus einem Ortsnamen bestehen, welche der Benutzer eventuell vergisst, wäre es von Nutzen, diesen Algorithmus so zu erweitern, dass es gesonderte
Kosten für das Entfernen eines Teilwortes gibt, welche geringer sind als die Kosten für das
Entfernen jedes einzelnen Zeichens dieses Teilwortes. Bei zwei großen Strings(Zeichenketten)
wächst der Speicheraufwand der Implementierung recht stark an O(n ∗ m). Doch könnte dieser reduziert werden auf O(Min(m, n)) wobei m und n die Längen der beiden Strings sind.
Der Algorithmus wird dazu benutzt, Haltestellen nach ihrem Stringabstand zu sortieren und
in einer Liste anzuzeigen.
5.3.3
Darstellung der Zeit
Da die Graphensuche auf zeitvarianten Graphen beruht, ist die interne Darstellung der Zeit
ein Thema. J2ME benutzt einen Zeitstempel, welcher die Anzahl der Millisekunden seit
1.1.1970 0:00Uhr UTC repräsentiert. Für Fahrpläne benötigt man jedoch Zeitdaten wie Uhrzeit und Wochentag. Diese Umrechnung ist möglich - jedoch auf Kosten der Performance.
Aus diesem Grund wurde anfangs versucht, Uhrzeit und Datum zu trennen. Das macht in der
Praxis wenig Sinn, da es zum Beispiel auch Routen über einen Tag hinaus gibt. Außerdem
ist es bei vielen Fahrplänen der Fall, dass Uhrzeiten kurz nach 0:00Uhr dem vorherigen Tag
zugeordnet werden. Aus diesem Grund ist die Entscheidung letztendlich für den Zeitstempel
gefallen, welcher im Bedarfsfall in Uhrzeit und Tag zerlegt wird.
5.3. Verwendete Methoden
5.3.4
22
Fahrpläne
Ein wichtiger Teil der öffentlichen Verkehrsmittel sind die Fahrpläne. Um Auskünfte über Abfahrtszeiten geben zu können muss das System diese Fahrpläne kennen. Da es nicht möglich
war, Fahrplandaten der Stadt Erlangen in maschinenlesbarer Form zu bekommen, mussten
diese manuell in diese Form gebracht werden, was viel Zeit in Anspruch nimmt und sehr
fehleranfällig ist.
5.3.5
Kartendaten
Karten sollen zur Orientierung des Benutzers und zur graphischen Veranschaulichung ortsbezogener Sachverhalte dienen. Wenn man einen Atlas oder eine herkömmliche Straßenkarte
benutzt, erkennt man mit etwas Übung sofort, welche Wege geeignet, und welche eher ungeeignet sind. Würde man einem Computer diese Aufgabe stellen aus einem solchen Bild Wege
und Straßen zu finden, könnte er diese Aufgabe nur mit großem Aufwand lösen. Als Alternative gibt es die Möglichkeit, Straßen und Wege explizit zu speichern. Solche Straßenkarten
gibt es, im Allgemeinen sind diese aber nicht frei erhältlich. Somit werden rein bildbasierte
Karten zur Veranschaulichung benutzt. Eine simple Möglichkeit für eine lokale Nutzung einer
Karte wäre zum Beispiel das Einscannen eines Atlas. Diese Idee ist jedoch sehr unpraktisch,
da zusätzlich ein recht genaues (globales) Koordinatensystem innerhalb der Karte benötigt
wird. Eine weitere Möglichkeit an elektronisches Bildmaterial für Karten gelangen, sind die
vielen Online-Routenplaner, welche in den letzten Jahren im Internet entstanden sind.
Zum Beispiel
• Google Maps http://maps.google.de/
• Yahoo!Maps http://maps.yahoo.com/beta/
• Ask.com http://maps.ask.com/maps
Diese Karten bieten den Vorteil, dass sie in verschiedenen Maßstäben vorhanden sind. Um
diese Karten offline benutzen zu können, müssen sie runtergeladen und dem Mobilgerätes zur Verfügung gestellt werden. Diese oben genannten Systeme benutzen eine MercatorProjektion. Somit braucht man noch eine Umrechnung von betreiberinternen Koordinaten
auf Mercator-Koordinaten, welche durch ein wenig Analysieren herauszubekommen sind.
Diese Bilder liegen im .png-Dateiformat vor und sind je nach Inhalt wenige bis einige Kilobyte groß und bilden in der Regel 256x256 Pixel ab. Zu Demonstrationszwecken wird auf die
Karten von Google Maps zurückgegriffen.
5.3.5.1
Referenzsystem
Da es ein Vielzahl von Mobilgeräten gibt, welche wie gesagt teilweise anderes Verhalten
zeigen, lege ich mich auf zwei Referenzsysteme fest, welche mir zum Testen zur Verfügung
stehen:
• K750i der Firma Sony Ericsson[K7507]
• K800i der Firma Sony Ericsson[K8007]
5.3. Verwendete Methoden
5.3.6
23
Entwicklungsumgebung
Sun[Sun07] sowie viele Hersteller von Mobilgeräten bieten eine komplette Test- und Entwicklungsumgebung für Mobilgeräte unter dem Namen WTK (Wireless Toolkit) an. Die
Entwicklungsumgebung ist für das Entwickeln von größeren Projekten ungeeignet, hierzu
empfiehlt sich die Benutzung der Entwicklungsumgebung Eclipse[Ecl07a] mit dem Plugin
EclipseME[Ecl07b]. In dieser findet sich von der Versionsverwaltung über Codedokumentation mit JavaDoc bis hin zur Codevervollständigung eine Vielzahl von Funktionen, welche dem
Entwickler das Leben leichter machen. Um das kompilierte Programm auf dem Mobilgerät
zum Laufen zu bringen, muss das Programm erst kompiliert, dann in ein Archiv gepackt ,
und zum Schluss an das Mobilgerät übertragen werden (per Datenkabel, BT, Infrarot oder
über ein drahtloses Netzwerk). Das EclipseME-Plugin ermöglicht in Zusammenarbeit mit
dem WTK von SonyEricsson das sogenannte Debug On-Device“ also das Ausführen und
”
Debuggen3 des Programmes auf dem Gerät.
5.3.7
Probleme der J2ME API
Im Vergleich zur API von J2SE hat J2ME eine recht eingeschränkte API.
Mathematische Funktionalität
Zum Beispiel sind die mathematischen Funktionen begrenzt, so gibt es beispielsweise keinen
Arcustangens. Die Lösung für diesen Fall ist eine Reihenentwicklung, was sich jedoch negativ
auf die Ausführungsgeschwindigkeit auswirkt.
Datenstrukturen
Des weiteren sind Strukturen wie die verkettete Listen nicht vorhanden. Jedoch kann man in
den meisten Fällen den Quellcode aus den J2ME-Bibliotheken kopieren und anpassen. Das
ganze funktioniert nicht bei nativen Implementierungen.
Klassenversion
J2ME unterstützt nur Java 1.3 Klassen und somit keine Features wie Generics, das heißt
Parametrisierung von Klassen wie ArrayList<Node> (ArrayList von Nodes). Das führt dazu,
dass man entweder für jeden parametrisierten Typ eine eigene Klasse schreiben muss oder
man übergeordnete Datentypen, im Extremfall Object (die Oberklasse aller Java-Objekte)
benutzt.
Reflections
Reflections heißt im Java-Umfeld Eigenschaften von Klassen zur Laufzeit analysieren und
manipulieren zu können. Somit ist es möglich ein Objekt vom gleichen Typ wie der des Referenzobjektes zu erstellen. Dies ist in J2ME nicht möglich, somit müssen alle Eigenschaften
zur Kompilezeit bekannt sein.
3
Auffinden und Beheben von Softwarefehlern
5.3. Verwendete Methoden
5.3.8
24
Objektorientierung vs. Performance
Eine der großen Stärken von Java ist das überwiegend objektorientierte Konzept (alle Datentypen außer Zahlen und Zeichen sind Objekte). Dieses Konzept führt bei guter Anwendung
zu besserer Verständlichkeit, Übersichtlichkeit und Wartbarkeit der Software, da sich Klassen
mit einem bestimmten Verhalten (aus der realen Welt) abstrahieren lassen. Jedoch ist das
Erzeugen und Verwerfen von Objekten in Java zeitintensiv.
Objekt Recycling
Um sich das Verwerfen eines veralteten Objektes und das Erstellen eines neuen Objektes
zu ersparen, kann man sich die Möglichkeit offen halten, das alte Objekt zu modifizieren
und damit aktuell zu halten. Das kann aber zu ungewünschten Seiteneffekten führen, da das
Objekt möglicherweise noch an anderen Stellen benutzt wird, wobei dort evtl. von der alten
”
Version“ des Objektes ausgegangen wird.
Primitive Datentypen
Da primitive Datentypen nicht erzeugt und verworfen werden müssen, sondern einfach existieren, bis sie aus dem Scope4 fallen, ist dieses Vorgehen in manchen Fällen eine Alternative
zu Objekten mit geringer Funktionalität.
Zum Beispiel gab es eine Klasse Point mit den Eigenschaften x und y für die Koordinaten sowie die toString()-Methode welche das ganze leserlich formatiert. Da im Rahmen der
Koordinatentransformation viele dieser Points erzeugt, ausgelesen und neu erzeugt werden,
wurde diese Vorgehen einfach ersetzt durch unterschiedliche Behandlungsroutinen für die xund die y-Werte und eine externe Funktionalität zur leserlichen Formatierung der Werte.
Damit brauchte man keine Objekte.
Strings
Obwohl Strings in Java ein wenig besonders behandelt werden (konstante Strings ”Text”,
Konkatenation mit Infixoperator +“), sind sie trotzdem Objekte. Besonders tückisch ist die
”
Konkatenation, wie folgendes Beispiel zeigt:
S t r i n g s = ”a ”
s = s + ”b ”
Man könnte meinen, dass der String verändert worden ist, jedoch existiert der String ”a”
weiterhin, und es wird ein neues String-Objekt erzeugt und die Referenz darauf gesetzt. In
einem solch einfachen Beispiel ist das nicht weiter tragisch, jedoch wenn man das ganze in
einer Schleife macht
4
Gültigkeitsbereich des Programms
5.3. Verwendete Methoden
25
S t r i n g t o S t r i n g ( O bj ect [ ] oa ) {
S t r i n g s = ””;
f o r ( i n t i = 0 ; i < oa . l e n g h t ; i ++) {
s += oa [ i ] . t o S t r i n g ( ) ;
}
return s ;
}
wird in jedem Schleifendurchlauf ein neues Objekt erstellt, welches im nächsten Schleifendurchlauf wieder verworfen wird. Für solche Fälle ist es ratsam die Klasse StringBuffer zu
benutzen
S t r i n g t o S t r i n g ( O bj ect [ ] oa ) {
S t r i n g B u f f e r sb = new S t r i n g B u f f e r ( ) ;
f o r ( i n t i = 0 ; i < oa . l e n g t h ; i ++) {
sb . append ( oa [ i ] . t o S t r i n g ( ) ) ;
}
r e t u r n sb . t o S t r i n g ( ) ;
}
Diese Klasse benutzt einen internen Puffer, welcher nur bei Bedarf vergrößert (also neu
erzeugt und kopiert) wird.
90/10 Regel
Diese Faustregel besagt, dass ein Programm zirka 90% der Zeit in zirka 10% des Codes
verbringt. Somit ist es am effektivsten diese 10% des Code zu finden und zu optimieren
und dabei die restlichen 90% des Code sauber und verständlich zu halten. Zur Analyse des
Laufzeitverhaltens und Speicherverbrauchs liefert das WTK ein Profiling- und EmulationsTool mit, mit dem sich Flaschenhälse“ im Programm auffinden lassen.
”
5.3.9
Optimierung
Reduktion der Linien
In der Realität werden gleichnamige Linien teilweise durch Varianten unterschiedlicher Streckenführung zusammengefasst. Im Gegensatz zu unterschiedlichen Linien fahren die Varianten jedoch nicht gleichzeitig und sind damit zeitlich disjunkt. Bei der bisherigen Implementierung wird der einfacheren Parametrierung halber für jede Variante eine Linie modelliert.
Diese Tatsache führt im erzeugten Graphen dazu, dass dieser unnötig anwächst. Für spätere Implementierung und Parametrierung sollten die Varianten einer Linie zu einer Linie
verschmelzen.
5.3. Verwendete Methoden
26
Optimierung des Suchalgorithmus
Wie bereits erwähnt, wurde als Graphensuchalgotithmus nur der Dijkstra-Algorithmus implementiert. Eine informierte Suche, wie mit A* (A Stern) ist jedoch noch effektiver. Da
als Anhaltspunkte geographische Distanzen und Richtungen vorhanden sind, sollte eine gute
Heuristik gegeben sein. Der A* hat im klassischen Fall eines Graphen (mit kostanten Kantengewichten) einen großen Overhead, jedoch werden weniger Knoten besucht. Damit ist der
Aufwand vergleichbar mit dem des Dijkstra-Algorithmus.
Da in unserem Fall jedoch keine konstanten Kantengewichte vorhanden sind, sondern es
schon bei der Ermittlung der Gewichte ein Overhead gibt, sollte der Overhead des A* nicht
mehr so stark ins Gewicht fallen und damit sollte A* einen Vorteil erlangen.
Optimierung im Suchalgorithmus
Der Flaschenhals des Dijkstra-Algorithmus ist die Suche nach dem kleinsten Element und die
Verringerung des Wertes eines Elements in der Fibonacci-Heap. Im Vergleich zu den meisten
Graphen gibt es viele Kanten zwischen zwei Knoten, damit kann man die Suche abkürzen,
indem man den neuen Wert des Zielknotens erst dann ändert, sobald man alle Kanten eines Knotens traversiert hat, welche zu dem selben Zielknoten führen. Bei diesem speziellen
zeitbehafteten Graphen überwiegt die Suche nach Abfahrtszeiten, also die Kantengewichte.
Die Suche nach der nächsten Abfahrtszeit läßt sich abkürzen, indem man eine maximale Zeit
vorgibt, in welcher eine Abfahrt sinnvoll ist. Dafür kann die momentane Ankunftszeit am
Zielknoten benutzt werden.
5.3.10
Zugriff auf externe Daten
Da eine Trennung zwischen Programmlogik und Daten (Bilddaten, Fahrplandaten, geographische Daten) erfolgen soll, müssen die Daten außerhalb des Programmes zur Verfügung
gestellt werden.
5.3.10.1
Dateien im Dateisystem
Die meisten modernen Mobilgeräte besitzen einen internen Flash-Speicher sowie Erweiterungsmöglichkeiten für Festspeicher in Form von Speicherkarten. Diese Form des Speichers
ist vergleichbar mit einer Festplatte oder einem Memorystick am PC. Der Zugriff aus diesen
Speicher erfolgt entweder intern im Handy, per Bluetooth/Infrarot oder per Datenkabel und
Software am PC.
5.3.10.2
Gefahren und Probleme bei externen Daten
Da Java-MIDlets eher eine Art plattformunabhängige Plugins sind, welche prinzipiell von
jedermann geschrieben werden können, steckt in ihnen ein Gefahrenpotenzial bezüglich Missbrauch des Mobilgerätes, Spionage und Zerstörung von Daten. Aus diesem Grund wird ein
MIDlet in einer Art Sandbox“ ausgeführt, in der es keinen Zugriff auf die Funktionalität
”
des Handys hat. Bald wurde erkannt, dass das zu einer sehr eingeschränkten Funktionalität führt und das Sandbox-Prinzip“ insofern erweitert, dass der Benutzer jede potentiell
”
unsichere Aktion bestätigen muss.
5.3. Verwendete Methoden
27
Probleme
Allein die Bilddaten der Karten umfassen für ein Ballungszentrum mehrere tausend Dateien,
von denen immer ca. neun Stück geladen werden. Des weiteren wird bei der aktuellen Implementierung für jede Buslinie und Variante eine eigene Datei benutzt. Somit kommt man
schnell auf einige dutzend Sicherheitsabfragen an den Benutzer. Dies macht das Programm
langsam und vor allem ist es dem Benutzer nicht zumutbar.
Rechtevergabe Der Benutzer kann dem MIDlet jedoch Rechte für bestimmte Klassen von
Operationen gewähren, und entscheiden, ob:
• kein Zugriff gewährt wird
• jedesmal eine Sicherheitsabfrage für diese Operationsklasse gestellt wird
• einmalige Sicherheitsabfrage für diese Operationsklasse gestellt wird
• der Zugriff auf diese Operationsklasse immer (ohne Frage) gewährt wird
Bei den meisten Mobilgeräten wird für die Rechtevergabe eine gültige Lizenz benötigt, mit
welcher das MIDlet signiert sein muss und das Mobilgerät muss diese als Java-Lizenz bereits
kennen. Es gibt auf den Mobilgeräten schon einige Lizenzen kommerzieller Anbieter. Diese
Lizenzen sind aber an recht hohe und laufende Kosten gebunden und sind für die Entwicklung
unflexibel, da jede Version der jar-Datei vom Lizenzgeber auf Sicherheitslücken untersucht
und lizensiert wird.
Lösungsansätze
Erhöhung der Kopplung Entgegen der eigentlichen Zielsetzung kann man zumindest
die Kartendaten und das Programm koppeln, indem man alles in eine jar-Patei packt, und
damit Sicherheitsabfragen verhindern, da das MIDlet nur auf eigene Dateien zugreift und
nicht aus der Sandbox“ heraus operiert. Fahrplandaten lassen sich prinzipiell auch in einer
”
Datei zusammenfassen, was die Anzahl der Zugriffe stark verringert. Das Problem bei diesem
Ansatz ist, dass die jar-Datei exterm aufgebläht wird. Somit ist die Größe des internen
Speicher des Mobilgerätes ein Problem, und einige Hersteller erlauben aus Sicherheitsgründen
nur eine MIDletgröße von 300Kilobyte.
Externes Archiv Da jar-Dateien prinzipiell nichts anderes als zip-Dateien sind, liegt der
Ansatz nahe, externe jar- und zip-Dateien auszulesen. Ein einziges Archiv bringt auch den
Vorteil mit sich, dass bei vielen kleinen Dateien nicht so viel Speicherplatz verschwendet
wird, da die Dateien im Archiv nicht in Zuordnungseinheiten abgelegt werden.
Die J2ME API bietet jedoch keine Möglichkeit solche Archive auszulesen.
5.3. Verwendete Methoden
28
Eigene Implementierung Der Großteil der externen Dateien besteht aus Kartendaten
in Form von .png-Dateien. Diese sind bereits komprimiert und somit bringt eine erneute
Zip-Kompression - wenn überhaupt - nur geringe Vorteile.
Ein Zip-Archiv läßt sich auch ohne Kompression mit Dateien füllen.
Eine eigene Implementierung ist daran gescheitert, dass innerhalb der Archiv-Datei gesprungen werden muss und bei jedem Zugriff wieder eine Sicherheitsabfrage stattfindet.
Eigene Zertifikate Java liefert ein Tool zur Erstellung eigener Zertifikate mit. Mit diesen lassen sich die MIDlets auch signieren. Das Problem bei diesem Ansatz ist, dass das
Mobilgerät das Zertifikat nicht kennt.
Senden des Zertifikates Es ist möglich, das eigene Zertifikat per BT an das K800i zu
senden. Es wird dort als Zertifikat erkannt und behandelt. Jedoch nicht als Java-Zertikat
sondern nur als Zertifikat für sichere Internetverbindungen.
Herstellersupport Der Hersteller Sony Ericsson verweist auf seiner Entwicklerseite auf die
J2ME-Spezifikation, welche besagt, dass der Benutzer keine eigenen Zertifikate installieren
darf. Zertifikate werden bei der Herstellung und Anpassung an Kundenwünscheauf( Customization“)
”
das Handy installiert [Zit07]. Somit ist vom Hersteller keine Möglichkeit des Zertifikateimports auf das Handy gegeben.
Customization Durch eine weite Verbreitung von Mobilgeräten und eine große Stückzahl
gibt es heutzutage viele externe Tools zum Zugriff auf Mobilgeräte. Die Funktionalität dieser geht vom Verwalten von Kontaktdaten, bis hin zur Dateiverwaltung. Einige Programme
gehen sogar noch weiter und bieten Individualisierung von Oberflächen und Verhalten des
Mobilgerätes an, was im Endeffekt eine Umprogrammierung bedeutet. Dabei wird direkt auf
das interne Dateisystem des Mobilgerätes zugegriffen und dieses manipuliert. Mit diesem Ansatz läßt sich das eigene Zertifikat problemlos auf das K750i kopieren und installieren. Dieses
Vorgehen ist jedoch nicht im Interesse des Herstellers, wahrscheinlich weil er selbst einen
Markt für Customization und Verträgen mit den Zertifizierungsstellen sieht. Deshalb wird in
jeder Generation von Mobiltelefonen ein neueres und komplizierteres Komunikationsprotokoll
implementiert um externe Programme wenigstens für eine gewisse Zeit auszutricksen. Aus
diesem Grund ist das Vorgehen wie bei dem K750i auf dem K800i nicht möglich. Inzwischen
haben auch Fremdanbieter einen Markt zum Customizen“ entdeckt und bieten kommerzielle
”
Programme mit mehr Know-How an, welche Lücken zum Zugriff auf das Dateisystem bieten.
So gibt es eine Möglichkeit, dass beim Neustarten des K800i Daten aus dem externen Dateisystem in das interne Dateisystem kopiert werden und verschiedene Befehle, wie einbinden
von Zertifikaten möglich sein sollten.
Diesen Ansatz habe ich bis jetzt nicht weiter verfolgt, da durch ein Firmware-Update des
K800i die Möglichkeit besteht auch ohne Zertifizierung Rechte zu gewähren. Somit ist das
Problem zumindest während der Entwicklung gelöst.
5.3. Verwendete Methoden
29
Alle hier genannten Verfahren führen zum Verlust von Garantie und Gewährleistung des
Händlers und Herstellers und sind somit auf eigene Gefahr durchzuführen. Die Recherche
und die Versuche haben sehr viel Zeit in Anspruch genommen und einige Situationen herbeigeführt, in denen das Mobiltelefon defekt zu sein schien.
Kommerzielle Zertifikate Für später Nutzung steht einem Erwerb von kommerziellen
Zertifikaten nichts im Wege.
5.3.10.3
Struktur im Dateisystem
Es werden abhängig von der Größe der zur Verfügung stehenden Karte sehr viele Bilddateien
benötigt. Das führt einerseits zu hohen Zugriffszeiten bei Verzeichnissen mit vielen Dateien,
was aber durch geschicktes Hashing5 umgangen werden kann.
Andererseits kommt es bei Verwendung vieler kleiner Dateien zu Platzverschwendung, da
Dateien im Normalfall in Zuordnungseinheiten abgelegt werden, wobei jede Zuordnungsdatei nur zu maximal einer Datei gehören kann. Wenn jedoch die Zuordnungsdatei wesentlich
größer als die Datei ist, wird ein Teil dieser Zuordnungseinheit verschenkt. Die Größe der
Zuordnungseinheiten lässt sich beim Formatieren des Datenträgers in einem betimmten Rahmen festlegen.
Wählt man die Zuordnungseinheiten jedoch zu klein, kommt es bei großen Dateien zu einem größeren Overhead im Dateizuordnungskatalog, da mehr Zuordnungseinheiten pro Datei
benötigt werden.
5.3.10.4
Recordstores
Um Daten speichern zu können bietet J2ME die Möglichkeit von sogenannten Recordstores,
das sind externe Objekte zum Speichern von Byte-Feldern. Der Zugriff auf diese ist jedoch
sehr beschränkt und die Größe sehr klein, damit eignen sie sich zum Speichern von Benutzereingaben.
Recordstores sind in etwa vergleichbar mit der Windows-Registry.
5
Zusammenfassung aufgrund von Streuwerten
6. Evaluierung
6.1
Routensuche
Die Hauptaufgabe des Programmes ist es, den Benutzer zwischen zwei Punkten so gut wie
möglich zu navigieren. Um einen Qualitätsvergleich zu bekommen, werden einige Beispielrouten mit denen des VGN verglichen.
Als Marschgeschwindigkeit(Luftlinie) wird eine Geschwindigkeit von 0.9 ms angenommen.
6.1.1
Fall 1
20.7.2007 11:49Uhr Erlangen Eskilstunastrasse - Erlangen Technische Fakultät
Studienarbeit
Time needed: 0.688sec
free:3217304
=========================================
Tracing:
time:12:16
time:12:15 Edge: graph.Node(Erlangen Stettiner Str.)-graph.Node(Erlangen Technische Fakultät) Line 293_1
time:12:14 Edge: graph.Node(Erlangen Theodor-Heuss-Anlage)-graph.Node(Erlangen Stettiner Str.) Line 293_1
time:12:12 Edge: graph.Node(Erlangen Sebaldusstr.)-graph.Node(Erlangen Theodor-Heuss-Anlage) Line 293_1
time:12:11 Edge: graph.Node(Erlangen Schenkstr.)-graph.Node(Erlangen Sebaldusstr.) Line 293_1
time:12:9 Edge: graph.Node(Erlangen Luise-Kiesselbach-Str.)-graph.Node(Erlangen Schenkstr.) Line 293_1
time:12:6 Edge: graph.Node(Erlangen Doris-Ruppenstein-Str.)-graph.Node(Erlangen Luise-Kiesselbach-Str.) Line 293_1
time:11:56 Edge: graph.Node(Erlangen Berufsschulzentrum)-graph.Node(Erlangen Doris-Ruppenstein-Str.)Fussmarsch
time:11:54 Edge: graph.Node(Sieglitzhof Markuskirche)-graph.Node(Erlangen Berufsschulzentrum) Line 284_2
time:11:53 Edge: graph.Node(Sieglitzhof Schronfeld)-graph.Node(Sieglitzhof Markuskirche) Line 284_2
time:11:52 Edge: graph.Node(Sieglitzhof Theresiakirche)-graph.Node(Sieglitzhof Schronfeld) Line 284_2
time:11:51 Edge: graph.Node(Sieglitzhof Rennesstr.)-graph.Node(Sieglitzhof Theresiakirche) Line 284_2
time:11:49 Edge: graph.Node(Sieglitzhof Eskilstunastr.)-graph.Node(Sieglitzhof Rennesstr.) Line 284_2
VGN
12:05
12:16
12:18
12:29
Uhr
Uhr
Uhr
Uhr
ab
an
ab
an
Sieglitzhof Eskilstunastr. Stadtbus 294
Erlangen Langemarckplatz Eltersdorf Volckamerstr.
Erlangen Langemarckplatz Stadtbus 287
Erlangen Technische Fakultät Erlangen Sebaldussiedlung
Auswertung
Da ein zehnminütiger Fußmarsch eingelegt wird, findet der Suchalgorithmus einen besseren
Weg als der Betreiber VGN.
6.1. Routensuche
6.1.2
31
Fall 2
20.7.2007 12:20Uhr Erlangen Eskilstunastrasse - Erlangen Technische Fakultät
Studienarbeit
Time needed: 0.25sec
free:3073108
=========================================
Tracing:
time:12:36
time:12:35 Edge: graph.Node(Erlangen Stettiner Str.)-graph.Node(Erlangen Technische Fakultät) Line 293_1_2
time:12:34 Edge: graph.Node(Erlangen Theodor-Heuss-Anlage)-graph.Node(Erlangen Stettiner Str.) Line 293_1_2
time:12:32 Edge: graph.Node(Erlangen Sebaldusstr.)-graph.Node(Erlangen Theodor-Heuss-Anlage) Line 293_1_2
time:12:31 Edge: graph.Node(Erlangen Schenkstr.)-graph.Node(Erlangen Sebaldusstr.) Line 293_1_2
time:12:29 Edge: graph.Node(Erlangen Luise-Kiesselbach-Str.)-graph.Node(Erlangen Schenkstr.) Line 293_1_2
time:12:28 Edge: graph.Node(Erlangen Doris-Ruppenstein-Str.)-graph.Node(Erlangen Luise-Kiesselbach-Str.) Line 293_1_2
time:12:27 Edge: graph.Node(Erlangen Siemens Med)-graph.Node(Erlangen Doris-Ruppenstein-Str.) Line 293_1_2
time:12:27 Edge: graph.Node(Erlangen Hartmannstr.)-graph.Node(Erlangen Siemens Med) Line 293_1_2
time:12:26 Edge: graph.Node(Erlangen Berufsschulzentrum)-graph.Node(Erlangen Hartmannstr.) Line 284_2
time:12:24 Edge: graph.Node(Sieglitzhof Markuskirche)-graph.Node(Erlangen Berufsschulzentrum) Line 284_2
time:12:23 Edge: graph.Node(Sieglitzhof Schronfeld)-graph.Node(Sieglitzhof Markuskirche) Line 284_2
time:12:22 Edge: graph.Node(Sieglitzhof Theresiakirche)-graph.Node(Sieglitzhof Schronfeld) Line 284_2
time:12:21 Edge: graph.Node(Sieglitzhof Rennesstr.)-graph.Node(Sieglitzhof Theresiakirche) Line 284_2
time:12:20 Edge: graph.Node(Sieglitzhof Eskilstunastr.)-graph.Node(Sieglitzhof Rennesstr.) Line 284_2
VGN
12:20
12:31
12:38
12:49
Uhr
Uhr
Uhr
Uhr
ab
an
ab
an
Sieglitzhof Eskilstunastr. Stadtbus 284
Erlangen Langemarckplatz Bruck/ER Eichendorffschule
Erlangen Langemarckplatz Stadtbus 287
Erlangen Technische Fakultät Erlangen Sebaldussiedlung
Auswertung
Obwohl der Suchalgorithmus diesmal keinen Fußmarsch vorschlägt, braucht der vom VGN
errechnete Pfad wieder länger. Das Problem ist ein geänderter Fahrplan der VGN, die Linie
293 fährt an der Hartmannstraße 12:26 statt 12:27 ab
6.1.3
Fall 3
20.7.2007 8:54Uhr Erlangen Technische Fakultät - Erlangen Eskilstunastrasse
Studienarbeit
Time needed: 0.875sec
free:431056
=========================================
Tracing:
time:9:31
time:9:28 Edge: graph.Node(Sieglitzhof Im Heuschlag)-graph.Node(Sieglitzhof Eskilstunastr.) Line 294_1
time:9:19 Edge: graph.Node(Erlangen Gedelerstr.)-graph.Node(Sieglitzhof Im Heuschlag)Fussmarsch
time:9:18 Edge: graph.Node(Sieglitzhof Markuskirche)-graph.Node(Erlangen Gedelerstr.) Line 285_1
time:9:16 Edge: graph.Node(Erlangen Berufsschulzentrum)-graph.Node(Sieglitzhof Markuskirche) Line 285_1
time:9:15 Edge: graph.Node(Erlangen Hartmannstr.)-graph.Node(Erlangen Berufsschulzentrum) Line 285_1
time:9:14 Edge: graph.Node(Erlangen Zollhaus)-graph.Node(Erlangen Hartmannstr.) Line 285_1
time:9:13 Edge: graph.Node(Erlangen Stubenlohstr.)-graph.Node(Erlangen Zollhaus) Line 285_1
time:9:11 Edge: graph.Node(Erlangen Langemarckplatz)-graph.Node(Erlangen Stubenlohstr.) Line 285_1
time:9:10 Edge: graph.Node(Erlangen Siemens-Verwaltung)-graph.Node(Erlangen Langemarckplatz) Line 287_1_2
time:9:9 Edge: graph.Node(Erlangen Mozartstr.)-graph.Node(Erlangen Siemens-Verwaltung) Line 287_1_2
time:9:8 Edge: graph.Node(Erlangen Anton-Bruckner-Str.)-graph.Node(Erlangen Mozartstr.) Line 287_1_2
time:9:7 Edge: graph.Node(Erlangen Berliner Platz)-graph.Node(Erlangen Anton-Bruckner-Str.) Line 287_1_2
time:9:6 Edge: graph.Node(Erlangen Röthelheimbad)-graph.Node(Erlangen Berliner Platz) Line 287_1_2
time:9:5 Edge: graph.Node(Erlangen Gleiwitzer Str.)-graph.Node(Erlangen Röthelheimbad) Line 287_1_2
time:9:4 Edge: graph.Node(Erlangen Görlitzer Str.)-graph.Node(Erlangen Gleiwitzer Str.) Line 287_1_2
time:9:3 Edge: graph.Node(Erlangen Theodor-Heuss-Anlage)-graph.Node(Erlangen Görlitzer Str.) Line 287_1_2
time:8:59 Edge: graph.Node(Erlangen Thomaskirche)-graph.Node(Erlangen Theodor-Heuss-Anlage) Line 287_1_2
time:8:54 Edge: graph.Node(Erlangen Technische Fakultät)-graph.Node(Erlangen Thomaskirche)Fussmarsch
6.1. Routensuche
32
VGN
09:12
09:23
09:26
09:33
Uhr
Uhr
Uhr
Uhr
ab
an
ab
an
Erlangen Technische Fakultät Stadtbus 293
Erlangen Hartmannstr. Büchenbach/ER Mönaustr.
Erlangen Hartmannstr. Stadtbus 294
Sieglitzhof Eskilstunastr. Sieglitzhof Eskilstunastr.
Auswertung
VGN benutzt einen anderen Bus, zu einem späteren Zeitpunkt und ist effektiv zur gleichen
Uhrzeit am Ziel. Desweiteren wird es wohl von den meisten Menschen nicht als besonders
effektiv angesehen die erste Station zu laufen statt am Startpunkt auf den Bus zu warten.
Beiden Varianten lassen sich Vor- und Nachteile abgewinnen.
6.1.4
Fall 4
20.7.2007 8:54Uhr Erlangen Technische Fakultät - Steudach Westfriedhof
Studienarbeit
Time needed: 1.109sec
free:490464
=========================================
Tracing:
time:9:53
time:9:16 Edge: graph.Node(Erlangen Am Hafen)-graph.Node(Steudach Westfriedhof)Fussmarsch
time:9:13 Edge: graph.Node(Erlangen Bayernstr.)-graph.Node(Erlangen Am Hafen) Line 289_2
time:9:12 Edge: graph.Node(Erlangen Äußere Brucker/P.-Gossen-Str.)-graph.Node(Erlangen Bayernstr.) Line 289_2
time:9:11 Edge: graph.Node(Erlangen Wichernstr.)-graph.Node(Erlangen Äußere Brucker/P.-Gossen-Str.) Line 289_2
time:9:10 Edge: graph.Node(Erlangen Forschungszentrum)-graph.Node(Erlangen Wichernstr.) Line 289_2
time:9:9 Edge: graph.Node(Erlangen Wehneltstr.)-graph.Node(Erlangen Forschungszentrum) Line 289_2
time:9:8 Edge: graph.Node(Erlangen Gebbertstr.)-graph.Node(Erlangen Wehneltstr.) Line 289_2
time:9:4 Edge: graph.Node(Erlangen Görlitzer Str.)-graph.Node(Erlangen Gebbertstr.)Fussmarsch
time:9:3 Edge: graph.Node(Erlangen Theodor-Heuss-Anlage)-graph.Node(Erlangen Görlitzer Str.) Line 287_1_2
time:8:59 Edge: graph.Node(Erlangen Thomaskirche)-graph.Node(Erlangen Theodor-Heuss-Anlage) Line 287_1_2
time:8:54 Edge: graph.Node(Erlangen Technische Fakultät)-graph.Node(Erlangen Thomaskirche)Fussmarsch
VGN
09:20 Uhr ab Erlangen Technische Fakultät Stadtbus 287
10:07 Uhr an Steudach Westfriedhof Steudach Westfriedhof
Auswertung
Die Route des VGN berechnet zwar einen Pfad mit kürzerer Verweildauer im Bus, jedoch ist
die Ankunftszeit der Studienarbeit früher und damit scheinbar optimal.
6.1.5
Fall 5
20.7.2007 9:05Uhr Erlangen Rennesstraße - Bruck/Erlangen Am Anger
Studienarbeit
Time needed: 0.531sec
free:2429812
=========================================
Tracing:
time:9:27
time:9:26 Edge: graph.Node(Erlangen Zentralfriedhof)-graph.Node(Erlangen Am Anger) Line 294_2
time:9:25 Edge: graph.Node(Erlangen Baumwollspinnerei)-graph.Node(Erlangen Zentralfriedhof) Line 294_2
time:9:21 Edge: graph.Node(Erlangen Hauptpost)-graph.Node(Erlangen Baumwollspinnerei) Line 294_2
time:9:20 Edge: graph.Node(Erlangen Bahnhofplatz)-graph.Node(Erlangen Hauptpost) Line 289_2
time:9:18 Edge: graph.Node(Erlangen Hugenottenplatz)-graph.Node(Erlangen Bahnhofplatz)Fussmarsch
time:9:16 Edge: graph.Node(Erlangen Obere Karlstr.)-graph.Node(Erlangen Hugenottenplatz) Line 294_2
time:9:15 Edge: graph.Node(Erlangen Langemarckplatz)-graph.Node(Erlangen Obere Karlstr.) Line 294_2
time:9:13 Edge: graph.Node(Erlangen Stubenlohstr.)-graph.Node(Erlangen Langemarckplatz) Line 294_2
time:9:12 Edge: graph.Node(Erlangen Zollhaus)-graph.Node(Erlangen Stubenlohstr.) Line 294_2
time:9:11 Edge: graph.Node(Erlangen Hartmannstr.)-graph.Node(Erlangen Zollhaus) Line 294_2
time:9:10 Edge: graph.Node(Erlangen Berufsschulzentrum)-graph.Node(Erlangen Hartmannstr.) Line 294_2
time:9:9 Edge: graph.Node(Sieglitzhof Markuskirche)-graph.Node(Erlangen Berufsschulzentrum) Line 294_2
time:9:8 Edge: graph.Node(Sieglitzhof Schronfeld)-graph.Node(Sieglitzhof Markuskirche) Line 294_2
time:9:7 Edge: graph.Node(Sieglitzhof Theresiakirche)-graph.Node(Sieglitzhof Schronfeld) Line 294_2
time:9:5 Edge: graph.Node(Sieglitzhof Rennesstr.)-graph.Node(Sieglitzhof Theresiakirche) Line 294_2
6.2. Interaktivität
33
VGN
09:06 Uhr ab Sieglitzhof Rennesstr. Stadtbus 294
09:26 Uhr an Erlangen Am Anger Eltersdorf Volckamerstr.
Auswertung
Die Studienarbeit findet einen Pfad mit gleicher Endzeit wie der VGN, jedoch wird der
Benutzer sinnloserweise einmal aufgefordert umzusteigen.
6.1.6
Zusammenfassung - Routensuche
Die zentrale Routensuche hat bei allen Tests gezeigt, dass die gefundenen Routen den gesetzten Anforderungen genügen.
6.2
Interaktivität
Der Benutzer soll nicht all zu lang auf das Ergebnis von Berechnungen warten müssen, und
erst recht nicht glauben, die Anwendung würde überhaupt nicht mehr reagieren. In diesem
Abschnitt werden die Mobiltelefone K750i, K800i und der Emulator auf dem PC (AMD
Athlon 1.8GHz beziehungsweise 0.5GHz) verglichen
6.2.1
Routensuche
Der wichtigste und in den meisten Fällen aufwändigste Teil der Berechnung ist die Routensuche. Sie ist abhängig von der Größe (wieviele Linien/Haltestellen) und Art des Graphen(mit/ohne Fußmärschen/Umsteigestrafen), wobei sich die Variante ohne Umsteigestrafen und mit Fußmärschen bewährt hat.
Benchmark
Bei allen Routen wird ein Startzeitpunkt von 20.7.2007 9:05Uhr und eine Marschgeschwindigkeit(Luftlinie) von 0.9 ms angenommen. Strafzeiten sind deaktiviert.
Die folgenden Werte sind in Sekunden(sek) zu verstehen.
Route
K750i K800i [email protected] [email protected]
Rennesstrasse-Am Anger
1.673 0.372
0.406
1.75
Techn. Fakultät-St.Johann
3.244 0.609
0.735
3.625
Waldkrankenhaus-Am Hafen 3.076 0.645
0.75
3.437
6.2.2
Damerau-Levenshtein
Wenn der Benutzer die Eingabe einer Haltestelle verändert, soll sich die Liste mit ähnlichen
Haltestellen aktualisieren. Um die Ähnlichkeit der Haltestellennamen zu vergleichen wird der
Damerau-Levenshtein-Abstand benutzt.
Nachfolgender Test zeigt die benötigte Zeit zum Testen aller Haltestellen mit einem vogegebenen Wort.
6.3. Bildschirmausschnitte
34
Benchmark
Die folgenden Werte sind in Millisekunden(ms) zu verstehen.
Wort
K750i K800i [email protected] [email protected]
’a’
100
17
32
125
’Heuschlag’
267
94
313
828
’Erlangen Eskilstunastrasse’
568
281
516
2672
6.2.3
Zusammenfassung - Interaktivität
Die beiden Mobiltelefone unterscheiden sich in ihrer Rechenleistung deutlich. Jedoch besitzt selbst das K750i Rechenleistung, um hohe Interaktivität zu gewährleisten. Ein noch
leistungsschwächeres Mobiltelefon ist jedoch nicht zu empfehlen.
6.3
Bildschirmausschnitte
Das Linke Bild zeigt einen Ausschnitt aus der Visualisierung, das rechte Bild einen Ausschnitt
aus der GUI.
6.4. Kritische Betrachtung der Arbeit und Ausblick
6.4
35
Kritische Betrachtung der Arbeit und Ausblick
6.4.1
Lösungsansatz
Der betrachtete Ansatz eines Offline-Systems wird in Zukunft immer mehr an Vorteilen
verlieren, da Kosten für mobiles Internet immer weiter sinken und inzwischen sogar Flatrates1
angeboten werden.
6.4.2
Hardwareanforderungen
Zu Beginn der Arbeit wurde nur das K750i benutzt, dabei kamen schon Sorgen auf, dass
Rechenleistung und Speicher für große Ballungsräume ein Problem darstellen.
Da der Sprung von einer Mobiltelefongeneration zur nächsten anscheinend so groß ist, wird
die Hardware in Zukunft ausreichend sein um mit solchen Problemen zurechtzukommen.
6.4.3
Modellierung der Fahrpläne
Die Modellierung der Fahrpläne ist noch nicht optimal, unter anderem dadurch, dass Ankunftszeit und Abfahrtszeit als identisches Punktereigniss betrachtet werden. Des weiteren
werden nur Fahrpläne betrachtet und keine zyklisch operierenden Verkehrsmittel, wie sie in
einigen Städten zu finden sind.
6.4.3.1
Verspätungen
Eine Erweiterung des Modells ist die Betrachtung von Verspätungen zu Hauptverkehrszeiten.
So kann man die Strafzeiten abhängig von der Uhrzeit machen, um so eine Veränderung des
Risikos beim Umsteigen zu modellieren.
6.4.4
Erreichte Ziele
Die meisten der Anfangs gesteckten Ziele wurden erreicht, jedoch nicht alle Ziele konnten
aufgrund des Umfangs in einer Studienarbeit verwirklicht werden.
6.4.4.1
Zielführung
Die Zielführung beschränkt sich darauf, die aktuelle Position, Start-, Zwischen- und Endpunkte anzuzeigen, jedoch wäre eine Übersichtliche Anzeige zum Beispiel in Form eines
Kompass wünschenswert.
6.4.4.2
Parametrierung
Die Datenstrukturen für Persistenz2 sind vorhanden, jedoch sind Parametrierungen für Art
des Graphen sowie freie Wahl von Start und Zielkoordinaten nicht ausreichend implementiert.
6.4.4.3
Suchalgorithmen
Ein Vergleich mit anderen Suchalgorithmen wäre wünschenswert gewesen.
1
2
Volumen- und Zeitunabhängige Nutzung
Dauerhafte Speicherung von Daten
6.4. Kritische Betrachtung der Arbeit und Ausblick
36
Suche nach Ankunftszeit
Die Suche nach der spätest möglichen Abfahrtszeit bei vorgegebener Ankunftszeit wurde
nicht implementiert, jedoch sollte sie sich nur unwesentlich von der bereits vorhandenen
Suche unterscheiden.
6.4.5
Tests
Diese Arbeit hat sich als Ziel gesetzt, plattformunabhängig zu sein. Es wurde zwar versucht, gegen Schnittstellen und nicht gegen Implementierungen zu schreiben, jedoch ist ein
Test immer notwendig um die Funktion zu zeigen. Aus diesem Grund wären weitere Geräte unterschiedlicher Hersteller nötig um die Funktionsfähigkeit zu testen und Anpassungen
durchzuführen, die das System implementierungsunabhängig zu machen.
6.4.6
GPS
Zum Benutzen des GPS wurde teilweise eine externe Bibliothek verwendet. Diese bietet
einen zu großen Funktionsumfang. Desweiteren konnte kein interner GPS-Empfänger getestet
werden.
6.4.7
Analyse und Design
Software-Entwicklung sollte in der Regel so ablaufen, dass man sich einen Plan über den
Funktionsumfang der Software macht. Darauf hin fertigt man einen Grobentwurf an, welcher
die Architektur und das grobe Klassengeflecht beschreibt. Danach kommt der Feinentwurf
und schlußendlich die Implementierung.
Da diese Studienarbeit teilweise aus einem Seminar und dessen Code heraus gewachsen ist,
war die Herangehensweise eine andere, d.h. der Entwurf ist parallel zum Code entstanden.
Außerdem waren Probleme und deren Lösungen anfangs nicht bekannt und somit sind Teile
des Designs und Code aus Trial-and-Error“3 heraus entstanden.
”
3
Problemlösung durch Ausprobieren
7. Ausblick und Zusammenfassung
7.1
Mögliche Erweiterungen
Optimierung
Für die Routensuche sind weitere Optimierungskriterien vorstellbar, wie z.B.
• so wenig Umstiege wie möglich
• so geringe Tarifkosten wie möglich
• eine gewichtete Kombination aus Kriterien
Jedoch wird eine zu große Auswahl von Kriterien den nicht-ambitionierten Benutzer mit
hoher Wahrscheinlichkeit vor Verständnisprobleme stellen, weshalb er nur grobe Parametrierungen vornehmen können sollte.
Updates
Um die Fahrpläne und POIs auf aktuellem Stand zu halten, wäre ein Online-Update denkbar.
Diese ließen sich z.B. über ein externes Programm am PC oder direkt über eine WAPVerbindung realisieren. Dies setzt einen laufenden Dienst voraus und braucht eine meist
kostenpflichtigen Verbindung.
Alternative Abfahrzeiten und Routen
Bei Online-Auskünften ist es möglich, sich mehrere Verbindungen zu leicht voneinander abweichenden Zeitpunkten anzeigen zu lassen. Bei entsprechender Ausführungsgeschwindigkeit
der Routensuche wäre eine solche Option denkbar.
7.2. Persönliches Fazit
38
Filter
Bei Übersichtsbetrachtung der Karten werden zum Beispiel die POIs so nahe bei einander
dargestellt, dass jede Übersichtlichkeit und damit auch Information verlorengeht. Deshalb
ist eine intelligente Darstellung oder eine Filteroption durch den Benutzer notwendig.
7.2
Persönliches Fazit
Ich habe dieses Thema für meine Studienarbeit vorgeschlagen und ausgewählt, da ich persönliches Interesse am Thema Busfahren“ habe.
”
Ein weiterer Ansporn für mich war, die Programmierung von mobilen Geräten näher kennenzulernen.
Die Arbeit hat viel Kreativität und selbstständiges Arbeiten erfordert.
Viele Ziele wurden erreicht und das Resultat kann sich meiner Meinung nach durchaus sehen
lassen.
Ich würde mich freuen, wenn das Ergebnis zum praktischen Einsatz kommt.
7.3
Anhang
Zu dieser Studienarbeit gehört ein Datenträger mit dem Quellcode und der Schnittstellendokumentation der Arbeit.
Literatur
[Can07] J2ME Java Doc API
Version: Juli 2007
http://java.sun.com/javame/reference/apis/jsr037/javax/microedition/lcdui/Canvas.html
[CP06]
C.S.R. Prabhu, Prathap A. R.: Bluetooth Technology and Its Applications with
JAVA and J2ME. Prentice-Hall of India Pvt.Ltd, 2006. – ISBN 8120324439
[DB07]
Internetseite der Deutschen Bahn AG
Version: Juli 2007
http://www.db.de/site/bahn/de/start.html
[Ecl07a] Eclipse - an open development platform
Version: Juli 2007
http://www.eclipse.org/
[Ecl07b] EclipseME
Version: Juli 2007
http://eclipseme.org/
[GMa07] Google Maps
Version: Juli 2007
http://maps.google.de/maps
[Gra07]
Wikipedia Graph
Version: Juli 2007
http://de.wikipedia.org/wiki/Graph (Graphentheorie)
[JSR07] Java Bluetooth API Online
Version: Juli 2007
http://jcp.org/aboutJava/communityprocess/mrel/jsr082/index.html
Literatur
40
[K7507] Sony Ericsson Entwickler Seite
Version: Juli 2007
http://developer.sonyericsson.com/site/global/products/phonegallery/k750/p k750.jsp
[K8007] Sony Ericsson Entwickler Seite
Version: Juli 2007
http://developer.sonyericsson.com/site/global/products/phonegallery/k800/p k800.jsp
[Kow07] Weiter Informationen Zum Thema GPS und Navigations
Version: Juli 2007
http://www.kowoma.de/gps/
[Lev66]
Levenshtein, V.I.: Binary codes capable of correcting deletions,insertions, and
reversals. Soviet Physics Doklady, 1966. – ISBN 0
[MID07] Wikipedia Mobile Information Device Profile
Version: Juli 2007
http://de.wikipedia.org/wiki/MIDP#Low-Level-API
[Sch06]
Schmatz, Klaus-Dieter: Java Micro Edition. Entwicklung mobiler Anwendungen
mit CLDC und MIDP. Dpunkt Verlag, 2006. – ISBN 3898644189
[Sun07]
Sun Developer Network
Version: Juli 2007
http://java.sun.com/products/sjwtoolkit/download-2 5 1.html
[THC01] Thomas H. Cormen, Ronald L. R. Charles E. Leiserson L. Charles E. Leiserson:
Introduction to Algorithms. B&T, 2001. – ISBN 0262531968
[Tom07] Internetseite der TomTom International BV
Version: Juli 2007
http://www.tomtom.com/products/
[VBB07] Verkehrsverbund Berlin-Brandenburg
Version: Juli 2007
http://www.vbb-fahrinfo.de/hafas/help.exe/dn?tpl=vbb software
[VGN07] Internetseite des Verkesverbund Großraum Nürnberg
Version: Juli 2007
http://www.vgn.de/komfortauskunft/
Literatur
41
[VRS07] Internetseite des Verkehrsverbund Rhein-Sieg
Version: Juli 2007
http://www.vrsinfo.de/1 2.php
[Zit07]
Sony Ericsson Developer World Zitat1
Version: Juli 2007
http://developer.sonyericsson.com/entry.jspa?externalID=380&categoryID=9

Documentos relacionados