const ETAPPEN =Array (eckige Klammern) mit den einzelnen EtappenobjektenArrays ist ein Objekt (geschwungene Klammern) mit key-value-Paarenganz zum Schluß noch ein Semikolon
  const ETAPPEN = [{
      "nr": 1,
      "github": "gatt-f",
      "titel": "Christchurch",
      "wikipedia": "https://de.wikipedia.org/wiki/Christchurch",
      "lat": -43.53,
      "lng": 172.62028
  },{
      // weitere Etappen
  }];
das Skript wird im <head>-Bereich von index.html eingebunden
  <!-- Etappen-Objekt -->
  <script src="etappen.js"></script>
for … of Schleifen sind eine Möglichkeit, Arrays abzuarbeiten
  for (let etappe of ETAPPEN) {
      //console.log(etappe);
      L.marker([etappe.lat, etappe.lng]).addTo(map);
  }
etappe verfügbarvalues des Etappenobjekts erfolgt über seine keyskey steht ein Punkt (z.B. etappe.lat)Popups an alle Etappenmarker hängen
innerhalb der for … of Schleife definieren wir das Popup mit Template-Syntax (also Backticks)
  let popup = `
      <h3>${etappe.titel} (Etappe ${etappe.nr})</h3>
      <ul>
      <li>geogr. Länge: ${etappe.lng}</li>
      <li>geogr. Breite: ${etappe.lat}</li>
      <li><a href="${etappe.wikipedia}">Link zur Wikipediaseite</a></li>
      <li><a href="https://${etappe.github}.github.io/nz/">Link zur Etappenseite</a></li>
  </ul>
  `;
über bindPopup hängen wir es dann an den Marker
  L.marker([etappe.lat, etappe.lng]).addTo(map).bindPopup(popup);
Quelle für die Department of conservation Hütten ist https://catalogue.data.govt.nz/dataset/doc-huts1
das Python-Skript huts_js_create.py konvertiert die originalen GeoJSON-Daten nach Javascript
so sieht der Datensatz in https://webmapping22s.github.io/nz/huts.js aus
  const HUTS = [{
      "name": "Lane Cove Hut",
      "info": "Mattresses, Toilets - non-flush, Water from tap - not treated, boil before use, Water supply",
      "region": "Northland, Whangaroa area",
      "image": "https://www.doc.govt.nz/thumbs/large/link/fdb8d47c96fb421db2d75021e0ff524a.jpg",
      "link": "https://www.doc.govt.nz/link/08cd5aa2d643478db1fe37a89a5c4bac.aspx",
      "bookable": true,
      "open": true,
      "lat": -35.01224,
      "lng": 173.73094
  },{
      // mehr als 900 weitere Hütten
  }]
gleich wie bei den Etappen, wird huts.js im <head>-Bereich von index.html eingebunden
  <!-- DOC Hütten -->
  <script src="huts.js"></script>
eine for of Schleife zeichnet die Marker
  // DOC Hütten anzeigen
  for (let hut of HUTS) {
      L.marker([hut.lat, hut.lng]).addTo(map);
  }
zur besseren Unterscheidung werden Kreise (L.circleMarker) statt Markern ( L.marker) verwendet
  L.circleMarker([hut.lat, hut.lng]).addTo(map);
die Popups werden wieder in der for of Schleife definiert und an die Kreise angehängt
  let popup = `
      <h3>${hut.name}</h3>
      <h4>${hut.region}</h3>
      <hr>
      <p>${hut.info}</p>
      <img src="${hut.image}" alt="Vorschaubild">
      <hr>
      <a href="${hut.link}" target="Neuseeland">Link zur Hütte</a>
  `;
  L.circleMarker([hut.lat, hut.lng]).addTo(map).bindPopup(popup);
zuerst wird der Bereich in index.html definiert, in dem die Navigation landen soll
navigation  <div id="map"></div>
  <div>
      <nav id="navigation"></nav>
  </div>
dann wird der <nav>-Bereich in der for of Schleife mit Hyperlinks zur jeweiligen Etappe gefüllt
in einer Variablen link wird der HTML-Code für den Etappenlink definiert - die Etappennummer ist der Linktext
  let link = `<a href="https://${etappe.github}.github.io/nz/">${etappe.nr}</a>`;
über document.querySelector können wir den <nav>-Bereich ansprechen und den Link ergänzen
  document.querySelector("#navigation").innerHTML += link;
document steht dabei für das HTML-DokumentquerySelector selektiert Elemente im HTML-Dokument über ihre CSS-Selektoren
            document.querySelector("#navigation") findet also das Element mit id="navigationdocument.querySelector(".shadow") findet das erste Element mit class="shadow"document.querySelector("h3") findet das erste <h3>-ElementquerySelectorAll würde alle passenden Elemente finden, für uns ist das jetzt aber nicht nötigüber .innerHTML können wir den Inhalt des <nav>-Bereichs sowohl abfragen, als auch verändern
wir verwenden natürlich += bei .innerHTML, um die Links anzuhängen
die Einträge der Etappennavigation stylen
in main.css definieren wir ein Klassen-Format .etappenLink
  .etappenLink {
      background: white;
      border: 1px solid black;
      padding: 0.5em;
      width: 2em;
      text-align: center;
      margin-top: 0.5em;
      display: inline-block;
  }
display: inline-block bewirkt, dass die einzelnen Kästchen ohne Zeilenumbruch in einer Zeile angezeigt werdenanwenden können wir diesen Stil in main.js bei der Definition des Links über class="etappenLink"
  let link = `<a href="https://${etappe.github}.github.io/nz/" class="etappenLink">${etappe.nr}</a>`;
einen Tooltip mit dem Etappentitel hinzufügen
  let link = `<a href="https://${etappe.github}.github.io/nz/" class="etappenLink" title="${etappe.titel}">${etappe.nr}</a>`;
den händisch gesetzten Marker entfernen wir
  L.marker([lat, lng]).addTo(map)
      .bindPopup(popup)
      .openPopup();
damit brauchen wir auch die Definition der Variable popup nicht mehr
  let popup = `
  <h3>${ETAPPEN[0].titel} (Etappe ${ETAPPEN[0].nr})</h3>
  <ul>
      <li>geogr. Länge: ${ETAPPEN[0].lng}</li>
      <li>geogr. Breite: ${ETAPPEN[0].lat}</li>
      <li><a href="${ETAPPEN[0].wikipedia}">Link zur Wikipediaseite</a></li>
      <li><a href="${ETAPPEN[0].github}">Link zur Etappenseite</a></li>
  </ul>
  `;
die zwei Variablen lat und lng sind auch überflüssig
  let lat = -39.13;
  let lng = 175.65;
wir verwenden das Etappenobjekt für die Koordinaten auf die wir blicken
statt
  let coords = [-39.13, 175.65];
verwenden wir
  let coords = [
      ETAPPEN[13].lat,
      ETAPPEN[13].lng,
  ];
13 ist der Index für das eigene Etappenobjekt im Etappen-Array - also die Etappennummer minus 1wir öffnen das Popup für den Marker in der for of Schleife des ETAPPEN-Objekts
dazu müssen wir uns den Marker in einer Variablen merken
statt
  L.marker([etappe.lat, etappe.lng]).addTo(map).bindPopup(popup);
verwenden wir
  let mrk = L.marker([etappe.lat, etappe.lng]).addTo(map).bindPopup(popup);
in einer if-Abfrage können wir den Marker dann öffnen, sobald wir bei unserer Etappennummer sind
  if (etappe.nr == 14) {
      mrk.openPopup();
  }
Sidestep: if-Abfrage
bei if-Abfragen kann als if, else-if, else verwendet werden
wenn wir schon bei unserer eigenen Etappe sind, können wir auch gleich die Etappennavigation stylen
wir erinnern uns, dass wir die Navigationskästchen über class="etappenLink" in main.css stylen
das eigene Kästchen soll jetzt hellgrau werden und der Link nicht anklickbar sein (wir sind ja schon hier)
deshalb führen vor der if-Abfrage eine Variable navClass ein und geben ihr den default-Wert etappenLink
  let navClass = "etappenLink";
in der if-Abfrage schreiben wir bei unserer Etappe eine zweite Klasse etappeAktuell dazu
  if (etappe.nr == 14) {
      mrk.openPopup();
      navClass = "etappenLink etappeAktuell";
  }
damit können wir navClass beim Template-String für den link verwenden
  let link = `<a href="https://${etappe.github}.github.io/nz/" class="${navClass}" title="${etappe.titel}">${etappe.nr}</a>`;
mit einer neuen CSS-Regel .etappeAktuell in main.css wird das Kästchen verändert
  .etappeAktuell {
      background: silver;
      color: white;
      text-decoration: none;
      pointer-events: none;
  }
bei der Gelegenheit setzen wir die Kästchen beim Format .etappenLink noch etwas von einander ab
  .etappenLink {
      /* bestehende Stile */
      margin-right: 2px;
  }
in der for-of Schleife der Hütten verwenden wir eine weitere if-Abfrage, um geöffnete Hütten grün und geschlossene Hütten rot einzufärben
dazu führen wir am Beginn der for-Schleife die Variable statusColor ohne default-Wert ein
  let statusColor;
mit einer if / else Abfrage setzen wir dann die gewünschte Farbe, je nachdem ob huts.open wahr oder falsch ist
  if (huts.open == true) {
      statusColor = "green";
  } else {
      statusColor = "red";
  }
damit die Kreise auch ihre Farbe ändern, ergänzen wir die Kreisfarbe als Optionen-Objekt beim L.circleMarker Aufruf
  L.circleMarker([hut.lat, hut.lng], {
      color: statusColor
  }).addTo(map).bindPopup(popup);
woher weiß man das, mit dem Optionen-Objekt?