10. Lehreinheit

From DHVLab

Revision as of 13:08, 30 March 2017 by Jschulz (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Benötigte Bestandteile

Damit wir die Daten, die wir in den vergangenen Sitzungen strukturiert erfasst haben, in Kartenform visualisieren können, benötigen wir verschiedene Komponenten[A 1]:

  • Eine HTML-Datei, auf der die Oberfläche der Webseite, also das Front-End basiert
  • Eine JavaScript-Datei, die in diese HTML-Seite eingebunden wird, um dynamische Elemente zu generieren (in unserem Fall die Google Map mit verschiedenen Funktionalitäten)
  • Eine CSS-Datei, die wir ebenfalls in unsere HTML-Seite einbinden, um das Aussehen der einzelnen Komponenten der HTML-Seite zu gestalten


Hinweis: Selbstverständlich ist es auch möglich, alle oben genannten Informationen in der HTML-Datei unmittelbar zu vereinen und auf das Anlegen mehrerer Dateien zu verzichten. Sobald jedoch bestimmte Elemente nicht nur in einer, sondern in mehreren Seiten eingebunden werden sollen, ist es sinnvoller, diese einmal an zentraler Stelle für alle Dateien abzulegen[A 2].

Praktische Vorgehensweise

Auf dem Virtuellen Desktop legt jeder Teilnehmer im Bereich "Persönlicher Ordner" einen Ordner "habsburg" an; dieser Ordner simuliert unseren Webspace (normalerweise auf dem Webserver). In diesem Ordner legen wir zwei Unterordner an, zum einen "css" für Cascading Stylesheet, zum anderen "js" für JavaScript.

Anschließend öffnen wir einen Editor unserer Wahl (im DHVLab beispielsweise Kate oder Sublime 2) und erstellen drei neue Textdateien:

  • habsburg.html (wird im Ordner "habsburg" abgelegt)
  • style.css (wird im Unterordner "css" abgelegt)
  • map.js (wird im Unterordner "js" abgelegt)

Die HTML-Datei

Im Folgenden wenden wir uns der Erstellung der HTML-Datei zu[A 3]:

<!DOCTYPE html>
<html lang="de">
<head>
<!-- Das ist unser ein Kommentar, den der Browser nicht ausgibt-->
<!-- Head-Bereich, enthält Metainformationen über die Webseite (werden nicht im Browser ausgegeben) -->

<title>Habsburger Grabdenkmäler</title>
<!-- Seitentitel, im Browserfenster, Leesezeichen, Suchmaschinen -->
<meta charset="utf-8">
<!-- Mit utf-8 können Sonderzeichen direkt genutzt werden (im Deutschen z.B. Umlaute ö, ä, ü) -->

<link rel="stylesheet" type="text/css" href="css/style.css">
<!-- Datei style.css mit Informationen zur Gestaltung unserer HTML-Seite - befindet sich im Ordner css -->

<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?v=3.exp"></script>
<!-- Einbinden der Google Maps API -->
<script type="text/javascript" src="js/map.js"></script>
<!-- Einbinden unserer JavaScript-Datei, die die Funktionen zu unserer Karte enthalten wird. -->
</head>

<body>
<!-- Umfasst den Inhalt, der im Browser ausgegeben wird -->

<h1>Die Grabstätten der Habsburger</h1>
<h2>Ein Datenbankprojekt des Hauptseminars, WiSe 2016/17</h2>
<!-- Überschriften vom Typ 1 und 2 -->
<div id="canvas"></div>
<!-- Das Google-Maps Layer wird mit einem div-Container eingebunden -->
<p align="center"> Ich bin ein Textblock mit einem <br /> Zeilenumbruch darin. Außerdem findet sich hier ein Link auf unsere <b>'echte'</b> <a href="http://www.habsburg.gwi.uni-muenchen.de/">Habsburg-Projektseite</a>. Wenn wir möchten, dass sich der Link in einem neuen Fenster öffnet, fügen wir noch das Attribut <i>target="blank"</i> hinzu: Wir verlinken also auf erneut auf die <a target="blank" href="http://www.habsburg.gwi.uni-muenchen.de/">Habsburg-Projektseite.</a></p>
<button onmousedown="init(); marker();">Marker</button>
<button onmousedown="line();">Linie</button>
<!-- Es werden zwei Schaltflächen erstellt, die unterschiedliche Funktionalitäten besitzen. Bei Klick auf die erste Schaltfläche werden die Marker gesetzt, bei der zweiten eine Verbindungslinie zwischen den Markern gezogen. Ihre Funktionalität erhalten sie über JavaScript-Funktionen, zu denen wir weiter unten kommen werden.-->
</body>

Die CSS-Datei

Nun bearbeiten wir die erstellte CSS-Datei im Editor, um ausgewählten Bereichen in unserer HTML-Datei Gestaltungsmerkmale zu übergeben. Wir beschränken uns dabei auf einige wenige Merkmale:

html, body {
height: 100%;
margin: 0px;
padding: 0px;
}
#canvas {
width: 90%;
height: 80%;
margin: auto;
}
/* Ein Kommentar in CSS */
/* canvas ist der Bereich für den Google Maps Layer. Das Doppelkreuz signalisiert, dass es sich hier um ein bestimtes div-Element mit der ID "canvas" handelt. */
h1 {
text-align: center;

  }

h2 {
text-align: center;
color: green;

  }

Die JavaScript-Datei

Beispiel 1

In diesem ersten Beispiel werden wir eine Karte erstellen, auf der sich mehrere, verschiedenfarbige Marker befinden und diese mit einer Linie verbinden. Sowohl die Marker als auch die Linien sollen nur dann erscheinen, wenn der Benutzer auf den zugehörigen Button klickt.

onload = init;
//mit dem Laden der Seite soll das Initialisieren der Karte einhergehen.

var map, mapOptions
var muenchen = new google.maps.LatLng(48.149600, 11.574481)
var paris = new google.maps.LatLng(48.859836, 2.359529)
var frankfurt = new google.maps.LatLng(50.110556, 8.682222)
var m1, m2, m3
// Variablen können nebeneinander, durch Kommata getrennt, geschrieben werden.
// Wir weisen den geographischen Längen- und Breitenangaben Variablennamen zu (muenchen, paris, frankfurt)
// m1, m2, m3 sind Variablen, die wir als Marker unten zu diesen Geodaten einsetzen werden

// Zunächst einmal muss die Google Maps initalisiert werden.
function init() {
map = new google.maps.Map(
// Der Variable map wird die JavaScript-Klasse google.maps.Map zugewiesen.
// Wir legen eine neue Instanz dieser Klasse mithilfe des JavaScript-Operators new an.

document.getElementById("canvas"),
// Referenz zum JavaScript-Objekt document.
mapOptions = {
// Nun definieren wir mit der Variable mapOptions das Aussehen unserer Karte; es sind kaum Grenzen gesetzt.
center: new google.maps.LatLng(48.149600, 11.574481),
zoom: 7,
streetViewControl:false,
scaleControl: true,
mapTypeControl:true,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.BOTTOM_CENTER
},
zoomControl:true,
zoomControlOptions: {
position: google.maps.ControlPosition.RIGHT_BOTTOM
},
mapTypeId: google.maps.MapTypeId.TERRAIN
}
);
}
// die verwendeten Optionen finden sich allesamt in der offiziellen Google Maps API-Beschreibung:
// https://developers.google.com/maps/documentation/javascript/tutorial?hl=de
// Probiert die unterschiedlichen Möglichkeiten aus, indem ihr false durch true ersetzt, andere Koordinaten einsetzt, eine andere Zoomstufe oder die in KAPITÄLCHEN gesetzten Style-Informationen verändert.

function marker() {
// Eine weitere Funktion, die dem Setzen von Markern gilt.
m1 = new google.maps.Marker(
{ map: map, position: muenchen, animation: google.maps.Animation.DROP, icon: "http://maps.google.com/mapfiles/ms/icons/blue-dot.png"
});
// Wir weisen der oben definierten Variable m1 die JavaScript-Klasse google.maps.Marker zu.
// In geschweiften Klammern finden sich Anweisungen, was das Programm erledigen soll:
// "Verwende die Karte "map", setze den Marker an die Position "muenchen" (also die eingangs definierte Variable mit den Geokoordinaten). "Wende die Animation "Drop" an, verwende ein blaues Icon. Die Standardfarbe ist rot -> siehe Frankfurt.

m2 = new google.maps.Marker(
{ map: map, position: paris, animation: google.maps.Animation.DROP, icon: "http://maps.google.com/mapfiles/ms/icons/green-dot.png"
});

m3 = new google.maps.Marker(
{ map: map, position: frankfurt, animation: google.maps.Animation.DROP
});
} function line() {
// Es gibt viele weitere Möglichkeiten der Visualisierung, z.B. die Verbindung einzelner Marker mit Linien.
new google.maps.Polyline(
{ map: map, path: [muenchen, frankfurt, paris], geodesic: true
})
}
// wir binden diese Funktion über einen Button in die HTML-Datei ein.

Beispiel 2

Im folgenden wählen wir einen leicht veränderten Ansatz. Wir nehmen an, dass durch ein vorgeschaltetes PHP-Skript Datensätze aus unserer Datenbank in die JS-Datei in Form eines Arrays eingespeist wurden. Auf diese Informationen wird im Anschluss dynamisch zugegriffen:

onload = init;

var map, mapOptions
var marker = []

var p = [
['Adelgunde von Bayern','Herzogin von Modena','w','1823','1914','61234',48.205673,16.370173],
['Adelheid (Maria Adelaida)','Königin von Sardinien','w','1855','231856',45.080833,7.767500]
];
// Vorteil: der komplette DB-Bestand wird zunächst abgerufen und in die Karte eingebunden; dadurch sind alle eingebundenen Funktionen (z.B. eine Timeline) nach einmaligem Laden durch den Benutzer auch offline benutzbar.

// Zunächst einmal muss die Google Maps initialisiert werden.
function init() {
map = new google.maps.Map(
// Der Variable map wird die JavaScript-Klasse google.maps.Map zugewiesen.
// Wir legen eine neue Instanz dieser Klasse mithilfe des JavaScript-Operators new an.

document.getElementById("canvas"),
// Referenz zum JavaScript-Objekt document.
mapOptions = {
// Nun definieren wir mit der Variable mapOptions das Aussehen unserer Karte; es sind kaum Grenzen gesetzt.
center: new google.maps.LatLng(48.149600, 11.574481),
zoom: 7,
streetViewControl:false,
scaleControl: true,
mapTypeControl:true,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.BOTTOM_CENTER
},
zoomControl:true,
zoomControlOptions: {
position: google.maps.ControlPosition.RIGHT_BOTTOM
},
mapTypeId: google.maps.MapTypeId.TERRAIN
}
);

for (var i in p){
marker[i] = new google.maps.Marker(
{map: map, position: new google.maps.LatLng(p[i][6], p[i][7]), opacity: 0.66, title: p[i][0], id:i, label: '*'});
}
// For-Schleife wiederholt die Anweisung, solange die Bedingung (var i in p vorhanden) zutrifft. Der nachfolgende Anweisungsblock wird beim Durchlauf ausgeführt, in unserem Fall 2x.
// Bei den einzelnen Parametern wird jeweils die Position der Information im Array angegeben (z.B. p[i][0] = Name der Person). Label fügt dem Marker ein Symbol hinzu.
}

// Hier könnte noch Beispiel 3 (mit Info-Fenstern) ergänzt werden


Anmerkungen

  1. Der Bezug der Daten aus der DB erfolgt über ein PHP-Skript. Die Daten werden unmittelbar in die JavaScript-Datei importiert; das hat den Vorteil, dass die Karte lokal mit allen Funktionalitäten abgerufen werden kann, nachdem die Daten einmal importiert wurden. Die PHP-Datei wurde im Kursrahmen nicht selbst erstellt, sondern von der ITG bereit gestellt.
  2. Dieses Vorgehen ist Ihnen bereits aus der Normalisierung von Forschungsdaten in relationalen DB-Systemen bekannt.
  3. Für eine Einführung in HTML, CSS und JavaScript siehe das Handbuch "Einführung in die Website-Erstellung".