Bericht - Persönliche Webseiten der Informatik

Transcription

Bericht - Persönliche Webseiten der Informatik
Projektbericht
Ruben Schempp
Maps on Rails
Fakultät Technik und Informatik
Department Informatik
Faculty of Engineering and Computer Science
Department of Computer Science
I
Ruben Schempp
Maps on Rails
Ausarbeitung eingereicht im Rahmen der Veranstaltung Projekt
im Wintersemester 2007/2008
im Studiengang Master of Science Informatik
am Department Informatik
der Fakultät Technik und Informatik
der Hochschule für Angewandte Wissenschaften Hamburg
Betreuender Prüfer: Prof. Dr. Kai von Luck
Abgegeben am 28. Februar 2008
Inhaltsverzeichnis
II
Inhaltsverzeichnis
1 Einführung
1.1 Arbeitsumgebung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1
2 Vision
2.1 Szenario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 Ziele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3 Vorgehensweise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
2
2
3
3 Evaluierung
3.1 Kartendienst . . . . . . . .
3.2 Ruby on Rails . . . . . . .
3.3 Google Maps on Rails . . .
3.3.1 Yellow Maps for Ruby
3.4 JavaScript . . . . . . . . .
3.5 Google vs. Yahoo! Maps . .
3.6 Aktualisierungsstrategie . .
3.7 Yahoo! Maps on Rails . . .
3.7.1 Rails Helper . . . . .
3.8 Web-Browser . . . . . . . .
.
.
.
.
.
.
.
.
.
.
4
4
5
5
6
7
7
8
10
12
12
4 Wirtschaftskontakte
4.1 Geoinformationsysteme der Stadt Hamburg . . . . . . . . . . . . . . . . . .
4.2 UbiLabs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
13
14
5 Zusammenfassung
5.1 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2 Ausblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
15
16
Literaturverzeichnis
17
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Abbildungsverzeichnis
III
Abbildungsverzeichnis
3.1 (Google) Maps on Rails . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 (Yahoo!) Maps on Rails . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
11
4.1 OpenLayers
14
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1 Einführung
1
1 Einführung
In diesem Bericht werden die Erfahrungen und Ergebnisse des Projekts vorgestellt. Das Projekt schließt an die Vorarbeiten des vergangenen Semesters in Anwendungen I [Schempp,
2007] an. Es wurde parallel zu den Arbeiten Anwendungen II [Schempp, 2008a] und Seminar
[Schempp, 2008b] durchgeführt. In den drei erwähnten Arbeiten werden die Vorbereitungen
auf die Masterarbeit beschrieben. Es wird eine Anwendung namens Maps on Rails an Hand
eines Szenarios (Einsatzleitstelle) beschrieben.
Ziel der Projektarbeit war ein erstes praktisches Herangehen an die Aufgabenstellung zu
ermöglichen, um so zu sehen, welche Möglichkeiten und vor allem welche Probleme bei der
Umsetzung der Anwendung auftreten. Für Maps on Rails war zu allererst zu prüfen, ob sich
die Anforderungen des Szenarios auch tatsächlich mit der favorisierten Technik umsetzen
lassen.
1.1 Arbeitsumgebung
Die Programmierung der prototypischen Versuche und Anwendung erfolgte in Ruby mit dem
Framework Ruby on Rails. Wo nötig, wurden auch HTML, CSS und JavaScript eingesetzt.
Als Datenbank kam SQLite (mit einem Plugin für Rails) zum Einsatz. Der in Rails integrierte
Webrick-Server wurde ebenfalls verwendet. Auf dem Client kam i.d.R. der Firefox Browser
zum Einsatz. Die Programmierung erfolgte unter MacOS 10.5 mit dem Editor TextWrangler.
Die Verwendung von Locomotive als Rails-Werkzeug für MacOS ist nicht unbedingt empfehlenswert, solange es mit der bereits in MacOS installierten Ruby-Version und mit dem
Umgang auf der Kommandozeile keine Probleme gibt.
Als Verbesserung kann die Entwicklungsumgebung Eclipse oder auch Aptana Studio eingesetzt werden. Aptana Studio1 ist eine von Eclipse abstammende, aber speziell auf WebEntwicklung spezialisierte IDE, die eine Ruby on Rails Unterstützung bietet. Eine kostenpflichtige Alternative stellt auch die Entwicklungsumgebung IntelliJ IDEA2 dar.
1
2
Siehe: http://www.aptana.com/studio
Siehe: http://www.jetbrains.com/idea
2 Vision
2
2 Vision
Die Vision des Projekts besteht in einer ersten prototypischen Umsetzung des Szenarios.
Letztlich soll die Anwendung Maps on Rails auf einem Großbildschirm eines Leitstands einsetzbar sein. Die Nutzung des Kartenmaterials von Google Maps und der Einsatz von Ruby
on Rails ist ebenfalls vorgesehen. Die Anwendung soll zudem im Browser lauffähig sein, um
so auf mehreren Geräten und Plattformen einsatzfähig zu sein. Zur Bedienung sind langfristig bessere Eingabekonzepte als Maus und Tastatur wünschenswert. Hier gibt es mit der
Multitouch-Technologie und dem Eye- und Motiontracker weiterführende Möglichkeiten.
2.1 Szenario
Das Szenario wurde bereits in den drei eingangs erwähnten Ausarbeitungen vorgestellt.
Es beschreibt ein Mehrbenutzersystem auf Kartenbasis als Rich Internet Application. Diese Web-Anwendung soll allen Teilnehmern ortsbezogene Informationen möglichst zeitnah
präsentieren. Mit ortsbezogenen Informationen sind in diesem Szenario in erster Linie Positionsangaben (von Menschen oder Fahrzeugen) gemeint. Auf Seite der Teilnehmer soll, beim
Einsatz unterschiedlicher Endgeräte, nicht mehr als ein Web-Browser von Nöten sein.
2.2 Ziele
Mit Blick auf die Vision ist das Ziel in erster Linie die Evaluation der für Maps on Rails benötigten Techniken im praktischen Einsatz. Dies betrifft vor allem Ruby on Rails und die
(Bibliotheken der) Kartendienste Yahoo! Maps [Yahoo! Inc., 2008] und Google Maps [Google
Inc., 2007b]. Nach Möglichkeit soll bis zum Ende des Projekts ein aussagekräftiger Prototyp
erstellt werden. An diesem soll beurteilt werden, ob und wie eine Integration eines Kartendienstes in einer Ruby on Rails Anwendung gelingen kann.
2 Vision
3
2.3 Vorgehensweise
Zu aller erst soll die zum Arbeiten in der Hochschule für Angewandte Wissenschaften Hamburg nötige Infrastruktur geschaffen werden. Als nächstes soll der Kartendienst Google Maps
untersucht werden, um die Möglichkeiten und Grenzen seiner Fähigkeiten in Bezug auf das
Szenario zu bewerten. Der folgende Schritt soll das Erkunden von Ruby on Rails und dessen
Konzepten sein, sodass eine Integration des Kartendienstes erfolgen kann.
3 Evaluierung
4
3 Evaluierung
Dieses Kapitel berichtet über die Eignung von und Erfahrungen mit verschiedenen Komponenten, die im Projekt eingesetzt bzw. behandelt wurden. Die Programmiersprache Ruby
wird hier nicht erneut behandelt, stattdessen wird auf [Schempp, 2006] verwiesen. Als gutes
Nachschlagewerk für Ruby hat sich [Thomas u. a., 2005] erwiesen.
Auf die Vorstellung der Komponenten wird hier ebenfalls verzichtet, sofern diese im Rahmen
der eingangs erwähnten Ausarbeitungen bereits vorgestellt worden sind. Die Behandlung
der Themen der folgenden Unterkapitel erfolgt chronologisch analog zur Bearbeitungsreihenfolge im Projekt.
3.1 Kartendienst
Kartendienste gibt es inzwischen verhältnismäßig viele. Doch nur wenige bieten eine API
an. Zwei auf den ersten Blick geeignet erscheinende Kartendienste, die auch schon in
vielen Mashups genutzt wurden, sind Yahoo! und Google Maps. Beide bieten JavaScriptBibliotheken, die sich nicht großartig voneinander unterscheiden, für die Einbindung in die
eigene Webseite an.
Für das weitere Vorgehen wurde Google Maps gewählt. Mit Google Maps lassen sich Marker auf der Karte positionieren, die ein Informationsfenster öffnen können. Diese Marker
lassen sich bewegen und löschen. Wichtig zu erwähnen ist, dass die Ortsinformationen für
die angezeigten Marker nicht bei Google, sondern in der eigenen Anwendung bzw. Webseite
verbleiben. Dieser Punkt war eine der erforderlichen Voraussetzungen für das Szenario. Die
bereits durch den Google Maps Dienst [Google Inc., 2007a] im Internet bekannte GeocodingFunktion (Ortssuche), wird ebenfalls von der API angeboten. Google Maps war nach dieser
ersten Einschätzung für die Darstellung der Informationen gut geeignet.
Bei ersten Tests stellte sich schnell heraus, dass die API Dokumentation von Google Maps
an einigen Stellen Fehler aufweist. Glücklicherweise existieren für viele Funktionen Codebeispiele, an denen man sich orientieren kann.
3 Evaluierung
5
3.2 Ruby on Rails
Für eine Einführung in Ruby on Rails ist das Buch „Agile Web-Development with Rails“
[Thomas und Hannson, 2006] zu empfehlen, das in die Strukturen von Rails einführt. Es
behandelt auch Themenbereiche wie das Testen der Anwendung, auf das im Projekt aus
Zeitgründen verzichtet wird. An Hand der Beispiele dieses Buches war es möglich, sich mit
den grundlegenden Konzepten von Rails vertraut zu machen. Erwähnenswert sind etwa die
„Migrations“, ein Konzept zum Generieren der SQL Data Definition Language. Mit datenbankunabhängigem Ruby-Code kann so das Datenbankschema beschrieben werden, aus dem
dann (angepasst an das jeweilige Datenbanksystem) der SQL-Code erzeugt wird, der die
Tabellen definiert. Auch Änderungen am Datenbankschema werden unterstützt. Ferner gibt
es eine Versionierung des Schemas, das eine Migration sowohl rückwärts als auch vorwärts
erlaubt.
Durch das Active Record Framework zur Datenbankanbindung erhält man nach der Definition einer Tabelle automatisch Zugriff auf entsprechende Objekte, die jeweils in einer Zeile
der Tabelle gespeichert sind. Konstruktoren und Zugriffsmethoden werden dabei gleich mit
erstellt. Dank der Namenskonventionen von Active Record wird aus dem Tabellennamen der
Klassenname erzeugt, sodass die Klasse direkt genutzt und erweitert werden kann. Active
Record unterstützt auch Transaktionen.
Rails bringt für die Programmierung von Webseiten mit dynamischem Inhalt eine integrierte Unterstützung der AJAX-Technologie mit, um HTML-Templates für die View (der
MVC-Architektur) zu erstellen. Dort können Aktionen für Ereignisse vorgesehen werden,
die JavaScript-Code ausführen. Als Unterstützung für die JavaScript-Programmierung bringt
Rails das Prototype-Framework1 mit.
3.3 Google Maps on Rails
Hilfestellung bei den ersten Schritten der Integration von Google Maps in eine Ruby on Rails
Anwendung sowie einige Anregungen für die Benutzeroberfläche gibt das Buch „Google
Maps Applications with Rails and Ajax“ [Lewis, 2007].
Die Einbindung einer Google Maps Karte in eine Ruby on Rails Anwendung ist grundsätzlich
kein Problem. Bestimmte Funktionen wie das Zoomen oder das Verschieben des Kartenausschnitts stehen sofort zur Verfügung. Abbildung 3.1 zeigt diesen frühen Zustand einer
Anwendung, bei der nur ein paar Bedienknöpfe auf der Karte vorhanden sind. Im Grunde
genommen hat die Karte aber noch nichts mit der tatsächlichen Anwendung zu tun, außer
1
Siehe: http://www.prototypejs.org/
3 Evaluierung
6
Abbildung 3.1: Eine einfache Google Maps Karte. [Google Inc., 2007a]
dass der Kartenausschnitt auf der Webseite dargestellt wird. Noch gibt es z.B. keine Informationen auf der Karte.
Um Marker2 auf einer Karte anzuzeigen, bedarf es einiger JavaScript-Anweisungen. Diese
Anweisungen können entweder statischer – und das wäre für eine interaktive Anwendung
ein schlechter Ansatz – oder dynamischer Art sein. Dynamisch bedeutet in diesem Fall, dass
der JavaScript Code zur Laufzeit der Anwendung durch Auslösung eines Ereignisses vom
Server an den Client geschickt wird, um einen Marker anzuzeigen. Ein Spezialfall davon wäre
die Erzeugung eines Markers durch den Benutzer. An dieser Stelle kommt RJS (Remote
JavaScript) zum Einsatz: Statt als Antwort auf eine Anfrage des Clients ein (fertiges) Stück
HTML zurückzuschicken, wird nun eine JavaScript-Vorlage aufgerufen und an den Client
gesendet.
3.3.1 Yellow Maps for Ruby
YM4R3 ist ein Plugin für Ruby on Rails, das eine kleine API für bestimmte Aktionen wie das
Geocoding mitbringt. Mit der YM4R/GM4 Erweiterung steht eine Ruby-Bibliothek für Rails
zur Verfügung. Diese ist nicht ganz vollständig implementiert, ermöglicht aber eine gut strukturierte Ansteuerung und Programmierung der Google Maps Karte.
2
Im Folgenden werden Marker, als einfachster Typ von Informationen, stellvertretend für alle darstellbaren
Informationstypen behandelt.
3
Yellow Maps for Ruby [Vellut, 2007a]
4
Yellow Maps for Ruby, Google Maps Plugin for Rails [Vellut, 2007b]
3 Evaluierung
7
Es können nun in Ruby Objekte erzeugt werden, die einen Marker in der Google Maps
Karte repräsentieren. Die Eigenschaften können etwa aus der Datenbank gelesen werden.
Der eigentliche Marker wird aber weiterhin durch JavaScript erzeugt. Dieses kann etwa zur
Laufzeit durch den YM4R/GM Plugin erzeugt werden und mit der RJS-Technik an den Client
gesandt werden, der daraufhin den Marker darstellt.
Leider ist die Implementierung von Y4MR/GM nicht ganz vollständig und sehr stark an
der Bibliothek von Google Maps orientiert. Dies führt dazu, dass man doch immer wieder
JavaScript-Code selbst schreiben muss. Man bekommt so zum Preis eines „hybriden Ansatzes“ einen schnellen Start in der Anwendungsentwicklung mit Google Maps geboten.
3.4 JavaScript
Die Programmierung in JavaScript ist ein Thema für sich, das hier nicht in der Tiefe behandelt
werden soll. Mit der objektorientierten und systematischen Programmierung in Sprachen wie
Smalltalk oder Ruby hat sie nicht viel gemein. In JavaScript selbst ist ohne die Verwendung
von weiteren Frameworks nicht besonders viel zu erreichen bzw. nur auf Umwegen. Jedoch
ist JavaScript der einzige Weg ohne zusätzliche Browser-Plugins Programmcode zu schreiben, der in unterschiedlichen Browsern läuft. (Auch wenn es an dieser Stelle durchaus unterschiedliche Interpretationen des Codes durch die Browser gibt.) Durch JavaScript lässt sich
die Bibliothek von Google Maps und auch die AJAX-Technologie für die Web-Anwendung
nutzen. Ruby on Rails bietet hier durch seine JavaScriptHelper Klassenbibliothek eine gute
Hilfestellung bei der Programmierung.
3.5 Google vs. Yahoo! Maps
An die Grenzen von Google Maps stößt man, wenn man die Position der Marker per JavaScript verändern möchte. Dies funktioniert in der Benutzeroberfläche per Hand gut. Jedoch
gibt es darüber hinaus keine Möglichkeit die einmal gesetzten Eigenschaften eines Markers
zu ändern. Der einzige Ausweg ist das Löschen und das anschließende neue Erstellen eines Markers. Dabei müssen allerdings alle EventListener, die zu einem Marker gehören, mit
gelöscht werden, um so alle Referenzen auf gelöschte Marker zu vernichten. Einen Schritt
weiter gedacht, stellt man dann fest, dass ein Marker und dessen Referenz nur auf dem
Client existieren, sodass man keine Möglichkeit hat, ihn direkt vom Server aus zu löschen.
Das ist nicht einmal möglich, wenn man die Referenz des Markers hätte, da diese auf jedem
weiteren Client einen anderen Wert besitzt.
3 Evaluierung
8
Google Maps erlaubt es an dieser Stelle nicht einen einmal gesetzten Marker zu ändern bzw.
zu löschen. Zwei Auswege gibt es jedoch. Die Erste wäre das Löschen aller Marker und das
anschließende neue Erstellen aller Marker, was jedoch äußerst unzufriedenstellend ist. Die
Zweite wäre ein Framework in JavaScript, das einem Objekt bzw. Marker einen eindeutigen
Bezeichner zuordnet. So kann der Server dem Framework auf der Clientseite den ObjektBezeichner und die jeweilige Nachricht übergeben, die dann lokal auf jedem Client umgesetzt wird. Doch auch diese Lösung ist im Rahmen des Projekts keine zufriedenstellende
Lösung, da sie mit einem zu großen Aufwand verbunden ist und in JavaScript durchgeführt
werden muss.
Hier lohnt sich ein Blick auf die Bibliothek von Yahoo! Maps. Dort gibt es zwar weniger Konfigurationsmöglichkeiten und auch keine Möglichkeit den Marker von Hand zu verschieben.
Doch diese Funktionalität ist an dieser Stelle zu vernachlässigen. Der entscheidende Unterschied ist, dass das Kartenobjekt von Yahoo! Maps eine Liste von Markern führt, deren
Namen bzw. Bezeichner man selbst bei der Markererstellung vergeben kann. So kann jedem Marker ein eindeutiger (und globaler) Bezeichner zugeordnet werden, auf den bei Bedarf auch zugegriffen werden kann. Dies ist bei dem beschriebenen Problem – das Löschen
eines einzelnen Markers – von entscheidendem Vorteil, da nun wirklich nur dieser eine Marker betroffen ist und alle anderen Marker davon unberührt bleiben. Daraus ergeben sich
drei Vorteile: Eine bessere Performance auf dem Client, eine geringere Datenmenge für die
Übertragung zum Client und eine – progammiertechnisch gesehen – schöne, einwandfreie
und direkte Umsetzung.
Die beschriebene Schwierigkeit war der Grund, die Entwicklung fortan mit Yahoo! Maps weiterzuführen.
Ein anderes Problem betraf die Programmierung der Aktionen für den Links-Klick und den
Doppelklick mit der Maus. Die Bibliotheken von Google als auch von Yahoo! waren nicht
in der Lage einen Doppelklick korrekt zu erkennen. An Stelle eines Doppelklicks wurden
zwei einzelne Klicks und ein Doppelclick ausgeführt, was – je nach Funktionsbelegung –
zu einer größeren Verwirrung bei der Bedienung führen kann. Hier ist, wie an so mancher
Stelle, ein wenig Nacharbeit notwendig. Ein Lösungsweg ist die verzögerte Ausführung des
einfachen Linksklicks, der bei einem Doppelklick abgefangen wird und so nicht ausgeführt
werden kann.
3.6 Aktualisierungsstrategie
Ein zentraler Punkt, den es zu klären galt, betrifft die Verteilung der aktualisierten Daten
an alle Clients, sodass jeder Client den gleichen, aktuellen Datenbestand vorliegen hat. Da
es sich bei Maps on Rails um eine Web-Anwendung handelt, müssen Anfragen für eine
3 Evaluierung
9
Aktualisierung vom Client an den Server geschickt werden. Dieser kann nicht von sich aus
tätig werden. Die aktuellen Daten können nur auf Anfrage eines Clients an (ausschließlich)
diesen versendet werden.
Im ersten Schritt wird jedem Marker die Zeit seiner letzten Veränderung zugeordnet. So kann
bei jeder Veränderung des Datenbestandes die aktuelle Zeit auf den Client übertragen werden. Bei der nächsten Aktualisierung kann der Server dann abgleichen, ob der Zeitstempel
des Clients mit dem größten Zeitstempel aller Marker übereinstimmt. Falls nicht, müssen alle
Marker, deren Zeitstempel größer als der des Clients ist, aktualisiert werden.
Im zweiten Schritt muss dem Fall Rechnung getragen werden, dass auf den Clients (noch)
Marker existieren können, die inzwischen von einem anderen Teilnehmer gelöscht worden
sind und deshalb aus der Datenbank des Servers verschwunden sind. Diese Marker werden
in dem zuerst genannten Schritt nicht erfasst (da für sie kein Zeitstempel vorliegt). Es ist
also nötig, bei der Aktualisierungsanfrage eines Clients, zusätzlich zum Zeitstempel auch
eine Liste mit Bezeichnern der Marker mitzusenden. Durch den Abgleich dieser Liste mit der
Marker-Datenbank des Servers kann auch dieses Problem behoben werden.
Für die Antwort des Servers auf das Ergebnis einer Aktualisierungsanfrage des Clients gibt
es demnach folgende Möglichkeiten:
• Kein Zeitstempel (auf Server oder Client) vorhanden: Komplette Aktualisierung aller
Marker
• Die Daten sind aktuell (Zeitstempel gleich): Aktualisierung mit leerem Inhalt
• Der Zeitstempel des Clients ist älter als der des Servers: Neuere Marker aktualisieren
• Für die beiden letzen Fälle muss zusätzlich geprüft werden, ob es Marker gibt, die nur
auf dem Client existierenden: Diese Marker müssen gelöscht werden.
• Der Zeitstempel des Clients ist neuer bzw. jünger als der des Servers: Dieser Fall
kann nur vorkommen, wenn der Marker mit dem größten Zeitstempel gelöscht wurde.
Er wird durch die vorhergehende Prüfung ebenfalls abgefangen und muss daher nicht
gesondert behandelt werden.
Die Aktualisierungsstrategie stellt die Grundlage für den Einsatz von Maps on Rails als Mehrbenutzersystem dar. Durch sie wird, ohne dass der Server Zustandsinformationen über irgendeinen Client speichert, der aktuelle Zustand an alle Clients übertragen. Dabei werden
ausschließlich die für den Client nötigen Informationen (nur die Veränderungen) übertragen.
Die Übertragung der Änderungen erfolgt mittels Remote JavaScript-Technik. Die Antwort auf
die AJAX-Anfrage des Clients ist JavaScript-Code, der auf dem Client ausgeführt wird, um
die Änderungen in der Karte vorzunehmen.
3 Evaluierung
10
Die Aktualisierung wird von den Clients periodisch ausgeführt und macht so eine Kartenanwendung mit sich dynamisch ändernden Daten möglich. Sofern nur statische Marker dargestellt würden, wäre ein solcher Algorithmus nicht notwendig. Viele derartige „statische“
Web-Anwendungen finden sich im Internet. Manche von ihnen aktualisieren alle Marker in
periodischen Abständen, bei anderen muss dies durch ein Neuladen der Seite bzw. Anwendung manuell geschehen.
Während der Entwicklungsphase war es ohne Probleme möglich, mit einigen Browsern zugleich auf die Anwendung zuzugreifen. Ohne das Ergebnis genauer zu erläutern, hat der
Web-Server auf dem Entwicklungsrechner ca. 40 Anfragen pro Sekunde bearbeiten können. Eine konkrete Aussage über die Performanz des Systems kann hieraus, auf Grund unzureichender und ungesicherter Informationen über die Rahmenbedingungen, sicher nicht
gefolgert werden.
3.7 Yahoo! Maps on Rails
Die Entwicklung von Maps on Rails auf Basis von Yahoo! Maps musste nun ohne den
YM4R/GM Plugin voran gehen, da dieser nur für Google Maps geeignet war. Wie sich schnell
herausstellte, lässt sich in relativ kurzer Zeit mit den Helpern von Rails ein guter Ersatz erstellen. Darauf wird im folgenden Unterkapitel eingegangen.
Der Einsatz von Yahoo! Maps erforderte einige Änderungen in der Umsetzung der Anwendung. So war es beispielsweise nicht mehr nötig für jedes Mausereignis einen eigenen EventListener zu schreiben. Die Funktionalität fällt an dieser Stelle geringer aus. Jedoch werden
diese Listener automatisch erzeugt und so bleibt einem die relativ umständliche Definitionen der Listener in JavaScript erspart. Ein Mehraufwand ist hingegen bei der Gestaltung der
Benutzeroberfläche nötig. Yahoo! erlaubt keine editierbaren Eingabefelder in den Informationsfenstern, sodass die Editiermasken ausserhalb der Karte dargestellt werden müssen.
Dies ist für eine Eingabe von wenigen Informationen sicher ein Nachteil. Bei der Eingabe von
mehreren Eigenschaften kann es aber auch ein Vorteil sein, da die Eingabe von der aktuellen
Darstellung auf der Karte entkoppelt wird. Wenn etwa eine Aktualisierung des Karteninhalts
stattfindet, bleibt die Eingabemaske davon unberührt und der Benutzer kann seine Eingabe
fortsetzen, ohne dabei unterbrochen zu werden.
Abbildung 3.2 zeigt ein Bild des aktuellen Prototypen. Auf die grafische Gestaltung wurde,
zugunsten der Funktionalität im Rahmen des Projekts, kein großer Wert gelegt. Zu erkennen
sind verschiedene Marker auf der Karte und eine Bedienleiste im oberen Kartenbereich. Am
rechten Bildrand ist eine Informationsleiste vorgesehen, die bisher aber nur sehr rudimentär
umgesetzt worden ist. Unter der Karte besteht die Möglichkeit die Ortssuche einzusetzen.
3 Evaluierung
Abbildung 3.2: Der Prototyp Maps on Rails während der Entwicklung.
11
3 Evaluierung
12
Alle anderen Knöpfe am unteren Bildrand dienen der Entwicklung und sind nicht weiter zu
beachten.
3.7.1 Rails Helper
Ruby on Rails bietet die Möglichkeit sogenannte Helper für den Gültigkeitsbereich eines
Controllers zu definieren. Hier lassen sich bestimmte Funktionalitäten kapseln, etwa wiederkehrende Aktionen oder, wie in diesem Fall umgesetzt, die Generierung des JavaScriptCodes.
Der Helper stellt eine Art spezialisierte Ruby-Bibliothek dar, die (zur Laufzeit aufgerufen) den
nötigen JavaScript-Code für die Ansteuerung der Karte erzeugt. Dieser JavaScript-Code
kann an einer Stelle gekapselt werden. Die Kapselung ermöglicht eine saubere Trennung
zwischen JavaScript und Ruby-Code, sowie zwischen der Steuerung des Programmablaufs
und der Anzeige. Durch diese Trennung wird auch die Übersichtlichkeit des Quellcodes gefördert. In der View kann dann auf die (an anderer Stelle gekapselte) Funktionalität für die
Steuerung des Programmablaufs zugegriffen werden, um den nötigen Code per Remote JavaScript an den Client zu senden. Die eigentliche Aufgabe der View, die die Erzeugung der
Anzeige auf dem Client betrifft, bleibt davon weitestgehend unberührt. Diese Trennung der
Belange entspricht auch der Einhaltung des Model-View-Controller Architekturmusters.
3.8 Web-Browser
Im Rahmen des Projekts wurde ein kurzer Test der Anwendung in verschiedenen Browsern
vollzogen. Die Anwendung lief in Firefox 2.x und Safari 3.x ohne Probleme. Im Internet Explorer 7 und Opera 9.x gab es geringe Abweichung bei der Darstellung. Die Anwendung
funktionierte jedoch erstaunlicherweise in vollem Umfang. Je nach weiterer Ausführung des
Projektes sind hier aber durchaus Probleme zu erwarten.
4 Wirtschaftskontakte
13
4 Wirtschaftskontakte
4.1 Geoinformationsysteme der Stadt Hamburg
Im Rahmen des Projekts kam ein Besuch beim Landesamt für Geoinformation und Vermessung der Stadt Hamburg zu Stande. Dort beschäftigt man sich auch mit einer sehr ähnlichen
Thematik, aber bedient sich einer völlig anderen technischen Umsetzung. Man kann den dort
gewählten Weg gewissermaßen als professionellere Herangehensweise betrachten. Dieses
Unterkapitel soll kurz auf die Rückschlüsse für das Projekt eingehen.
Kartendienste wie Google oder Yahoo! Maps bieten bei weitem nicht den Funktionsumfang
eines professionellen Geoinformationssystems. Die Kartendienste sind am Endbenutzer orientiert und bieten beispielsweise eine gute Ortssuche und Routenplanung. Professionelle
Systeme basieren auf anderen Techniken und sind nicht über eine verhältnismäßig einfache
JavaScript-Bibliothek einzubinden. Es gibt Lösungen, die auf den Standards des OGC1 basieren und auf den Web Map Service (WMS) und den Web Feature Service (WFS) aufbauen.
Beides sind Web-Services. WMS beschreibt den standardisierten Zugriff auf Kartenmaterial.
WFS beschreibt den Zugriff und die Manipulation von geographischen bzw. raumbezogenen
Daten.
Um ein System zu bauen, das auf diesen Web-Services aufbaut, müssen eigene Server für
diese Dienste betrieben werden2 . Das Kartenmaterial kann sicher aus einer bestehenden
Quelle bezogen werden, aber die darzustellenden Daten müssen durch einen speziellen
Dienst zur Verfügung gestellt und persistent gemacht werden. Dieser Dienst muss selbst
aufgesetzt werden, da die Daten (nach den Anforderungen an das Szenario) im eigenen
System und nicht bei einem anderen Anbieter gespeichert werden sollen. I.d.R. werden bei
solchen Systemen Karten und Daten zusammen in einer Ebene angezeigt, sodass dabei ein
wenig Interaktivität der Anwendung verloren geht3 .
Der große Vorteil solcher standardisierter Dienste liegt in ihrer Interoperabilität und der Offenheit der Standards. Im Vergleich zu den proprietären Lösungen von Google und Yahoo!
Maps, die zudem weitere (auch lizenzrechtliche) Nutzungeinschränkungen mit sich bringen,
1
Open Geospatial Consortium, siehe http://www.opengeospatial.org/standards/.
Für entsprechende Dienste, siehe http://www.deegree.org/.
3
Man denke dabei an die verschiebbaren Marker von Google Maps.
2
4 Wirtschaftskontakte
14
Abbildung 4.1: Satellitenbild des OpenLayers-Kartendienstes. [OSGeo, 2008]
gibt es auch freie Kartendienste. Abbildung 4.1 zeigt den freien Kartendienst OpenLayers,
der ebenfalls eine JavaScript API zur Verfügung stellt.
Auf Grund des begrenzten zeitlichen Rahmens des Projekts werden diese Ansätze hier nicht
weiter vertieft. Ferner liegt das Hauptaugenmerk des Projekts nicht auf der Evaluation verschiedener Geoinformationsysteme und deren Kartenmaterial, sondern auf Entwicklung eines Ruby on Rails Systems mit – wenn man so will, irgendeinem, – Kartendienst.
4.2 UbiLabs
Im Rahmen eines Vortrags des GameCityLabs, in dem wir unsere Projekte im Collaborative Workplace der Hochschule für Angewandte Wissenschaften Hamburg vorstellten, kam
ein Kontakt mit der Firma Ubilabs4 zustande. Ubilabs entwickelt verschiedene MashupAnwendungen mit Google Maps und setzt seit Neuestem auch Ruby on Rails ein. Eine
weiterführende Zusammenarbeit im Rahmen der Masterarbeit ist angedacht.
4
Siehe: http://www.ubilabs.net/
5 Zusammenfassung
15
5 Zusammenfassung
Dieser Bericht steht in Zusammenhang mit den Arbeiten am Leitstandszenario im Seminar, Anwendungen I und Anwendungen II. In Kapitel 2 wurden zuerst die Vision, die Ziele
und die Vorgehensweise vorgestellt. Kapitel 3 beschreibt die evaluierten Techniken mit ihren Möglichkeiten und Grenzen und diskutiert einige Überlegungen, die zur Erstellung des
Prototypen notwendig waren. In diese Kategorie fallen etwa Ruby on Rails, JavaScript bzw.
AJAX, Google und Yahoo! Maps und die Anwendung Maps on Rails selbst.
5.1 Fazit
Abschließend kann festgestellt werden, dass das Projekt erfolgreich gelaufen ist und das Resultat im gewünschten Bereich liegt. Aufgrund des beschränkten zeitlichen Rahmens nahmen der Aufbau der Infrastruktur im Labor und die Einarbeitungszeit in die Techniken einen
überproportional großen Teil der Projektzeit ein.
Die Evaluation der diskutierten Techniken im Rahmen des Szenarios war erfolgreich. Es
ist mit einer gewissen Einarbeitungszeit möglich eine interaktive Kartenanwendung prototypisch mit Ruby on Rails als Web-Anwendung umzusetzen, wie das Arbeitsergebnis des
Projekts zeigt. Wünschenswert wäre eine noch tiefergehende Beschäftigung mit dem Ruby
on Rails Framework gewesen. Einige Aspekte wie z.B. das Testen konnten im Projekt leider
nicht betrachtet werden. Auf jeden Fall war das Arbeiten mit Ruby on Rails angenehm und
motivierend.
Die Programmierung in JavaScript war des Öfteren sehr mühsam und relativ kompliziert, da
einfache Dinge oft nicht auf dem direkten Weg zu erreichen waren. Sicherlich spielte hier
auch die mangelnde Erfahrung in der Programmierung von JavaScript eine Rolle.
Der Einsatz der Kartendienste war eng mit den Schwierigkeiten von JavaScript verbunden,
gestaltete sich aber relativ problemlos. Nichtsdestotrotz wäre das ein oder andere Mal eine
bessere Unterstützung durch die Bibliotheken der Kartendienste sinnvoll gewesen. Dies trifft
beispielsweise bei der Gestaltung von Eingabemasken innerhalb des Kartenausschnitts und
insbesondere bei der Manipulation von bestehenden Markern zu. Hier besteht für die weitere
Entwicklung der Bibliotheken der Kartendienste noch genügend freies Potential.
5 Zusammenfassung
16
5.2 Ausblick
Nachdem hier gezeigt wurde, dass die Integration eines Kartendienstes in Ruby on Rails
in einer gewinnbringenden Art und Weise möglich ist, kann das Thema in der anstehenden
Masterarbeit weiter vertieft werden. Mehrere Punkte sind noch nicht behandelt worden und
an einigen Stellen gibt es noch Verbesserungsbedarf. Eine kleine Auswahl anzugehender
Bereiche sind die Integration einer Benutzerverwaltung, die Nutzung einer Datenbank mit
Geoinformations-Erweiterung, die Darstellung von Flächen mittels Polygonen und die Verbesserung des User-Interfaces. Hier ist z.B. auch an Usability-Tests zu denken.
Weitere interessante Gebiete sind die Nutzung eines freien Kartendienstes (z.B. OpenLayers) und die Steuerung von Maps on Rails mit neuen Eingabegeräten wie Multitouch,
Eyetracker und Motiontracker, sofern dies für einen Einsatz in einer Einsatzleitstelle an einer
Powerwall einen Sinn ergibt. Die Anwendung Maps on Rails kann im Zuge dieser Umsetzungen weiter ausgebaut werden. Dabei soll der Schwerpunkt aber noch stärker auf der
Evaluation von Ruby on Rails liegen.
Literaturverzeichnis
[Google Inc. 2007a]
G OOGLE I NC.: Google Maps. 2007. – URL http://maps.
google.de/. – Zugriffsdatum: 11.11.2007
[Google Inc. 2007b]
G OOGLE I NC.: Google Maps API. 2007. – URL http://www.
google.com/apis/maps/. – Zugriffsdatum: 26.11.2007
[Hansson 2008]
H ANSSON, David H.: Rails Framework Documentation. 2008. – URL
http://api.rubyonrails.com/. – Zugriffsdatum: 25.02.2008
[Lewis 2007]
2007
[OSGeo 2008]
L EWIS, Andrew: Google Maps Applications with Rails and Ajax. Apress,
OSG EO, Open Source Geospatial Foundation: OpenLayers. 2008. – URL
http://www.openlayers.org/
[Schempp 2006]
S CHEMPP, Ruben: Aktuelle Entwicklungen im Bereich von Programmiersprachen, Hochschule für Angewandte Wissenschaften Hamburg, Bachelorarbeit,
2006. – URL http://users.informatik.haw-hamburg.de/~ubicomp/
arbeiten/bachelor/schempp.pdf
[Schempp 2007]
S CHEMPP, Ruben: Anwendungen I: Verteilte Web-Anwendungen
mit Ruby.
2007. –
URL http://users.informatik.haw-hamburg.
de/~ubicomp/projekte/master2007/schempp/bericht.pdf. – Zugriffsdatum: 07.02.2008
[Schempp 2008a] S CHEMPP, Ruben: Anwendungen II: Interaktive Karten als Rich Internet Applications. 2008. – URL http://users.informatik.haw-hamburg.
de/~ubicomp/projekte/master07-08-aw/schempp/bericht.pdf.
–
Zugriffsdatum: 29.02.2008
[Schempp 2008b]
S CHEMPP, Ruben:
Seminar: Maps on Rails.
2008. –
URL
http://users.informatik.haw-hamburg.de/~ubicomp/projekte/
master07-08/schempp/bericht.pdf. – Zugriffsdatum: 29.02.2008
[Thomas u. a. 2005] T HOMAS, Dave ; F OWLER, Chad ; H UNT, Andy: Programming Ruby:
The Pragmatic Programmers’ Guide. Second Edition. The Pragmatic Programmers, 2005.
– ISBN 0-9745140-5-5
Literaturverzeichnis
[Thomas und Hannson 2006]
T HOMAS, Dave ; H ANNSON, David H.:
Development with Rails. Pragmatic Bookshelf, 2006
[Vellut 2007a]
18
Agile Web-
V ELLUT, Guilhem:
Yellow Maps for Ruby. 2007. – URL http://
rubyforge.org/projects/ym4r/. – Zugriffsdatum: 07.02.2008
[Vellut 2007b] V ELLUT, Guilhem: Yellow Maps for Ruby, Google Maps Plugin for Rails.
2007. – URL http://ym4r.rubyforge.org/ym4r_gm-doc/. – Zugriffsdatum:
07.02.2008
[Yahoo! Inc. 2008]
YAHOO ! I NC.: Yahoo! Maps API. 2008. – URL http://developer.
yahoo.com/maps/ajax/V3.7/reference.html. – Zugriffsdatum: 07.02.2008

Documents pareils