webmapping24s

Session 5: functions, async/fetch/await und data.gv.at Wien

1. Neues Repo wien erstellen, clonen und online bringen

2. Template analysieren - was passiert in main.js

// BasemapAT Layer mit Leaflet provider plugin als startLayer Variable
let startLayer = L.tileLayer.provider("BasemapAT.grau");
startLayer.addTo(map);
// Layer control mit Basemap.at layern über Leaflet.providers hinzufügen
L.control
  .layers({
    "BasemapAT Grau": startLayer,
    "BasemapAT Standard": L.tileLayer.provider("BasemapAT.basemap"),
    "BasemapAT High-DPI": L.tileLayer.provider("BasemapAT.highdpi"),
    "BasemapAT Gelände": L.tileLayer.provider("BasemapAT.terrain"),
    "BasemapAT Oberfläche": L.tileLayer.provider("BasemapAT.surface"),
    "BasemapAT Orthofoto": L.tileLayer.provider("BasemapAT.orthofoto"),
    "BasemapAT Beschriftung": L.tileLayer.provider("BasemapAT.overlay"),
  })
  .addTo(map);
// Marker für den Stephansdom mit Popup zum Stephansdom Overlay hinzufügen
L.marker([stephansdom.lat, stephansdom.lng])
  .addTo(map)
  .bindPopup(stephansdom.title)
  .openPopup();

3. Interface verfeinern

4. Daten via L.geoJSON von URL laden

Ein Real World Beispiel: Sehenswürdigkeiten Wien

Sidestep: Javascript Funktionen

Eine Funktion ist vereinfacht gesagt ein Codeblock mit einem Namen, der “irgend etwas tut” wenn wir ihn aufrufen. Beim Aufruf können wir Parameter für “das Tun” innerhalb der Funktion mitschicken und wenn der Codeblock abgearbeitet ist, kann die Funktion auch wieder einen einzelnen Wert, einen Array oder eine Objekt zurückliefern.

b) GeoJSON Daten asynchron mit einer Funktion laden

c) GeoJSON Daten mit L.geoJSON visualisieren

Zum Visualisieren benötigen wir noch eine Zeile Code, wir verwenden die Leaflet Methode L.geoJSON, die wir in der Leaflet Dokumentation unter Other Layers / GeoJSON finden. Im Abschnitt Factory sehen wir, dass wir das geojson-Objekt als ersten Parameter übergeben können, die Optionen brauchen wir vorerst nicht. Wie schon bei früheren Layern verwenden wir .addTo(map) um den geoJSON Layer an die Karte zu hängen.

async function loadSights(url) {
  let response = await fetch(url);
  let geojson = await response.json();
  console.log(geojson);

  L.geoJSON(geojson).addTo(map);
}

COMMIT: https://github.com/webmapping24s/wien/commit/1bea70768e6f4f41ecaa5ae0add79db51686272f

die Marker für die Sehenswürdigkeiten sind damit auf der Karte sichtbar

GeoJSON-Layer der Sehenswürdigkeiten in ein Overlay schreiben

Noch eleganter ist es, den GeoJSON-Layer in ein eigenes Overlay zu schreiben.

COMMIT: https://github.com/webmapping24s/wien/commit/0a2789d1e9e0261df91f146467ad3f0a3dbacbcf

Damit kann der Sehenswürdigkeiten Layer ein- und ausgeschaltet werden

Layer Sehenswürdigkeiten verfeinern und Popup hinzufügen

Übungsaufgabe: wir erstellen vier weitere Layer

Über die Suche bei https://www.data.gv.at/ suchen wir Layer mit JSON-Daten und implementieren sie mit den jeweiligen Vorgaben:

  1. Funktion loadLines

    COMMIT: https://github.com/webmapping24s/wien/commit/be14b7d6ea560efb314052afb5fd30d9788e5bb9

  2. Funktion loadStops

    COMMIT: https://github.com/webmapping24s/wien/commit/8040bb895b60ab961a33baaf0683bc89cddbad22>

  3. Funktion loadZones

    COMMIT: https://github.com/webmapping24s/wien/commit/ef42d26b160d9955ba27df70ad96479b98eb0504

  4. Funktion loadHotels
    • Suche: Hotels
    • Datensatz Hotels und Unterkünfte Standorte Wien
    • Overlay Key/Label: hotels und “Hotels und Unterkünfte”

    COMMIT: https://github.com/webmapping24s/wien/commit/c1d53fb96c40b74c1cd57b417318b6cda5df157e

das war’s für heute …