In der zweiten Aufgabe soll die Position (d.h. die Koordinaten) des Geräts, auf dem der Browser läuft, mit JavaScript abgefragt und in das Formular aus Aufgabe 1 eingetragen werden. Es wird dazu die HTML5 GeoLocationAPI verwendet. Zusätzlich soll durch Nutzung der Leaflet API eine dynamische Karte angezeigt werden.
Die Aufgabe vertieft die Programmierung von Klassen und Callbacks sowie DOM Manipulation mit JavaScript. Zudem wird die Nutzung einer externen Web API demonstriert.
Aktualisieren sie zunächst das Github Repository https://github.com/zirpins/vs1lab. Wenn Sie den git-Tipps aus Aufgabe 1 gefolgt sind, gehen sie wie folgt vor (Beispiel für Linux/Mac):
cd ~/git/vs1lab # wechsle in das git Verzeichnis
git checkout master # wechsle in den Hauptzweig (eigene Änderungen vorher mit 'commit' sichern)
git pull # lade Aktualisierungen herunter
git checkout dev # wechsle wieder in den eigenen Branch
git merge master # übernehme mögliche Änderungen aus dem Hauptzweig (Daumen drücken, dass es keine Konflikte gibt, sonst manuell mit eigenen Änderungen zusammenführen)
Nach der Aktualisierung kann die zweite Aufgabe vorbereitet werden.
Da die Aufgaben aufeinander aufbauen, aber die Lösungen nicht vermischt werden sollen, muss die Lösung der ersten Aufgabe als Ausgangspunkt für die zweite Aufgabe übernommen werden:
- Kopieren Sie die CSS-Datei
Aufgabe1/gta_v1/public/stylesheets/style.css
aus Aufgabe 1 nachAufgabe2/gta_v2/public/stylesheets/style.css
- Kopieren Sie die HTML-Datei
Aufgabe1/gta_v1/public/index.html
aus Aufgabe 1 nachAufgabe2/gta_v2/public/index.html
und öffnen Sie diese dann im Editor. - Öffnen sie diese zwei Dateien sowie das Skript
Aufgabe2/gta_v2/public/javascripts/geotagging.js
in ihrem Editor.
Die HTML Datei aus Aufgabe 1 muss nun noch etwas angepasst werden, um JavaScript und die Leaflet-API zu aktivieren.
Fügen sie zunächst im Head des HTML Dokuments vor dem <meta>
-Tag folgendes Fragment ein:
<!-- Leaflet CSS and JavaScript (in this order) -->
<link rel='stylesheet' href='https://unpkg.com/[email protected]/dist/leaflet.css'
integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY="
crossorigin=""/>
<script src="https://unpkg.com/[email protected]/dist/leaflet.js"
integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo="
crossorigin=""></script>
Fügen sie dann noch als letzten Teil im Body des HTML Dokuments folgendes Fragment ein:
<!-- Load JavaScripts
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="./javascripts/geotagging.js"></script>
Die CSS Datei aus Aufgabe 1 muss auch angepasst werden, um die Kartendarstellung mit der Leaflet-API zu ermöglichen.
Fügen Sie folgende neue Regel in die CSS Datei ein:
#map {
height: 500px;
}
Nun können sie testen, ob die Vorbereitung erfolgreich war. Öffnen Sie die Datei Aufgabe2/gta_v2/public/index.html
im Browser. Es sollte ein Alert-Fenster erscheinen. Dadurch sehen sie, dass das zugehörige Skript ausgeführt wird.
Sie sollten auch die JavaScript Konsole im Browser öffnen und auf Fehler prüfen.
Das JavaScript enthält zunächst einige Klassen mit Hilfsfunktionen. Die Klasse LocationHelper
erleichtert die Verwendung der HTML5 Geolocation API zur Bestimmung der Position. Die Funktion findLocation
nimmt als Parameter eine Callback Funktion an, die bei Erfolg mit einem instanziierten LocationHelper Objekt 'zurückgerufen' wird. Das LocationHelper Objekt enthält dann die aktuellen Koordinaten als private Properties, die mit einer 'get'-Methode ausgelesen werden können. Beim Aufruf der Funktion muss die Callback Funktion übergeben werden.
Fügen sie eine Funktion updateLocation
zum Skript hinzu, die folgendes tut:
- Auslesen der Position mit
findLocation
- Im Erfolgsfall
latitude
undlongitude
Eingabefelder des Tagging-Formulars und des Discovery-Formulars (versteckte Eingabefelder) suchen und in derenvalue
-Attribute Koordinaten schreiben.
Rufen sie die neue updateLocation
-Funktion nach dem Laden des Dokuments automatisch auf.
Wir wollen nun die gefundene Position auf einer Karte darstellen. Konkret werden wir zu diesem Zweck Leaflet verwenden, ein - für unsere Zwecke - kostenfreier Dienst um dynamische Karten anzuzeigen.
Die Klasse MapManager
enthält einige Hilfsfunktionen zur Verwendung von Leaflet. Um eine Instanz zu erzeugen, wird der Konstruktor aufgerufen. Dann kann die Methode initMap
verwendet werden, um die Karte mit der aktuellen Position zu initialisieren. Mit der Funktion updateMarkers
werden die übergebenen GeoTags auf der Karte als Marker angezeigt. Beim Aufruf der Methode werden die zuvor vorhandenen Marker entfernt.
Ergänzen sie ihre updateLocation
-Funktion wie folgt:
- Rufen sie die Funktionen
initMap
undupdateMarkers
mit den aktuellen Koordinaten auf. Daraufhin wird die Karte in Ihrer App angezeigt. - Suchen sie im DOM das Image Element auf der Webseite.
- Löschen Sie sowohl das
<img>
-Element als auch das<p>
-Element für die Beschriftung mithilfe des DOM (nicht in der HTML Datei). Dadurch wird der Platzhalter zur anfänglich Darstellung der Karte auf der Webseite wieder entfernt.
Zur Übersicht folgen noch mal alle Anforderungen in kompakter Form als Checkliste.
- Funktion
updateLocation
erstellen- Nach dem Laden automatisch aufrufen
- Auslesen der Position mit
findLocation
- Koordinaten in die Formulare eintragen
-
latitude
undlongitude
Felder - Koordinaten in
value
-Attribute schreiben - Auch versteckte Eingabefelder berücksichtigen
-
-
updateLocation
-Funktion ergänzen- Funktionen
initMap
undupdateMarkers
aufrufen -
img
undp
-Elemente mit DOM-Funktionen entfernen
- Funktionen