Altes Köln

Widget:Leaflet: Unterschied zwischen den Versionen

Aus Altes Köln
Wechseln zu:Navigation, Suche
Keine Bearbeitungszusammenfassung
Markierung: Manuelle Zurücksetzung
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
<!-- Kartencontainer -->
<!-- DIV für die Karte -->
<div id="map" style="height: 600px; width: 100%;"></div>
<div id="map" style="width:100%; height:600px;"></div>


<!-- Leaflet + MarkerCluster CSS -->
<!-- SMW-Ausgabe (als JSON, unsichtbar) -->
<script id="smw-data" type="application/json">
{{#ask:
[[Kategorie:Schule]]
|?Koordinaten
|?Schultyp
|?Has page=link
|format=json
}}
</script>
 
<!-- Leaflet CSS -->
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.3/dist/leaflet.css"/>
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.3/dist/leaflet.css"/>
<link rel="stylesheet" href="https://unpkg.com/leaflet.markercluster/dist/MarkerCluster.css"/>
 
<link rel="stylesheet" href="https://unpkg.com/leaflet.markercluster/dist/MarkerCluster.Default.css"/>
<!-- MarkerCluster CSS -->
<link rel="stylesheet" href="https://unpkg.com/leaflet.markercluster@1.5.3/dist/MarkerCluster.css"/>
<link rel="stylesheet" href="https://unpkg.com/leaflet.markercluster@1.5.3/dist/MarkerCluster.Default.css"/>


<!-- Leaflet + MarkerCluster JS -->
<!-- Leaflet + MarkerCluster JS -->
<script src="https://unpkg.com/leaflet@1.9.3/dist/leaflet.js"></script>
<script src="https://unpkg.com/leaflet@1.9.3/dist/leaflet.js"></script>
<script src="https://unpkg.com/leaflet.markercluster/dist/leaflet.markercluster.js"></script>
<script src="https://unpkg.com/leaflet.markercluster@1.5.3/dist/leaflet.markercluster.js"></script>


<script>
<script>
(function(){
  // Prüfen, ob Map-DIV vorhanden
  if (!document.getElementById('map')) return;


// Layer-Container
  // SMW-JSON einlesen und parsen
var layerGrund = L.markerClusterGroup();
  var smwRaw = document.getElementById('smw-data').textContent.trim();
var layerGym = L.markerClusterGroup();
  var schoolData = [];
var layerGes = L.markerClusterGroup();
  try {
var layerBeruf = L.markerClusterGroup();
    // SMW gibt ein JSON-Objekt mit "results" — wir wandeln in ein Array um
var layerFoerder = L.markerClusterGroup();
    var smw = JSON.parse(smwRaw || '{}');
    // depending on SMW version, 'results' may hold items as properties
    if (smw.results) {
      for (var k in smw.results) {
        if (!smw.results.hasOwnProperty(k)) continue;
        var item = smw.results[k];
        // Extrahiere gewünschte Felder (falls MediaWiki/SMW unterschiedliche Struktur hat, anpassen)
        schoolData.push({
          link: item.fulltext || item.name || k,
          Schultyp: (item.printouts && item.printouts.Schultyp) ? item.printouts.Schultyp[0] : (item.Schultyp || ''),
          Koordinaten: (item.printouts && item.printouts.Koordinaten) ? item.printouts.Koordinaten[0] : (item.Koordinaten || '')
        });
      }
    } else if (Array.isArray(smw)) {
      // Falls SMW direkt ein Array liefert
      schoolData = smw;
    }
  } catch (e) {
    console.error('SMW JSON parse error', e);
  }


// Karte
  // Leaflet map
var map = L.map('map').setView([50.94, 6.96], 11);
  var map = L.map('map').setView([50.94, 6.96], 11);
  L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
    maxZoom: 18,
    attribution: '© OpenStreetMap contributors'
  }).addTo(map);


// OSM Layer
  // Cluster-Gruppen
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
  var layerGrund  = L.markerClusterGroup();
     maxZoom: 18
  var layerGym    = L.markerClusterGroup();
}).addTo(map);
  var layerGes     = L.markerClusterGroup();
  var layerBeruf  = L.markerClusterGroup();
  var layerFoerder = L.markerClusterGroup();


// SMW-Daten werden ersetzt:
  var bounds = [];
{{#ask:
[[Kategorie:Schule]]
|?Koordinaten
|?Schultyp
|?Has page=link
|format=array
|name=schoolData
}}


// Marker erzeugen
  // Helfer: Koordinaten extrahieren (String "lat,lon" oder Objekt)
schoolData.forEach(function(school){
  function extractCoords(coordValue){
     if(!school.Koordinaten) return;
     if (!coordValue) return null;
    if (typeof coordValue === 'string' && coordValue.indexOf(',') !== -1){
      var p = coordValue.split(',');
      var lat = parseFloat(p[0]), lon = parseFloat(p[1]);
      if (!isNaN(lat) && !isNaN(lon)) return [lat, lon];
    }
    if (typeof coordValue === 'object' && coordValue.lat && coordValue.lon){
      var la = parseFloat(coordValue.lat), lo = parseFloat(coordValue.lon);
      if (!isNaN(la) && !isNaN(lo)) return [la, lo];
    }
    return null;
  }


     var coords = school.Koordinaten.split(',');
  // Marker erzeugen
     var lat = parseFloat(coords[0]);
  schoolData.forEach(function(school){
     var lon = parseFloat(coords[1]);
     if (!school) return;
     var coords = extractCoords(school.Koordinaten);
     if (!coords) return;


     var marker = L.marker([lat, lon])
     var marker = L.marker(coords)
                .bindPopup('<strong>' + school.link + '</strong><br>' + school.Schultyp);
      .bindPopup('<strong>' + (school.link || '—') + '</strong><br>' + (school.Schultyp || ''));


     switch(school.Schultyp){
     switch ((school.Schultyp || '').toString()){
        case "Grundschule":
      case "Grundschule": layerGrund.addLayer(marker); break;
            layerGrund.addLayer(marker);
      case "Gymnasium":   layerGym.addLayer(marker); break;
            break;
      case "Gesamtschule": layerGes.addLayer(marker); break;
        case "Gymnasium":
      case "Berufskolleg": layerBeruf.addLayer(marker); break;
            layerGym.addLayer(marker);
      case "Förderschule": layerFoerder.addLayer(marker); break;
            break;
      default: layerGrund.addLayer(marker);
        case "Gesamtschule":
            layerGes.addLayer(marker);
            break;
        case "Berufskolleg":
            layerBeruf.addLayer(marker);
            break;
        case "Förderschule":
            layerFoerder.addLayer(marker);
            break;
        default:
            layerGrund.addLayer(marker);
     }
     }
    bounds.push(coords);
  });


});
  // Default-Layer anzeigen
 
  layerGrund.addTo(map);
// Standard-Layer zur Karte hinzufügen
  layerGym.addTo(map);
layerGrund.addTo(map);
layerGym.addTo(map);


// Layer-Kontrolle (Legende)
  // Layer-Control (Legende)
var overlays = {
  var overlays = {
     "Grundschulen": layerGrund,
     "Grundschulen": layerGrund,
     "Gymnasien": layerGym,
     "Gymnasien": layerGym,
Zeile 82: Zeile 117:
     "Berufskollegs": layerBeruf,
     "Berufskollegs": layerBeruf,
     "Förderschulen": layerFoerder
     "Förderschulen": layerFoerder
};
  };
  L.control.layers(null, overlays, {collapsed:false}).addTo(map);


L.control.layers(null, overlays, {collapsed:false}).addTo(map);
  // Auto-fit bounds
  if (bounds.length) map.fitBounds(bounds);


})();
</script>
</script>

Version vom 6. Dezember 2025, 23:18 Uhr

<script id="smw-data" type="application/json"> JSON </script>

<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.3/dist/leaflet.css"/>

<link rel="stylesheet" href="https://unpkg.com/leaflet.markercluster@1.5.3/dist/MarkerCluster.css"/> <link rel="stylesheet" href="https://unpkg.com/leaflet.markercluster@1.5.3/dist/MarkerCluster.Default.css"/>

<script src="https://unpkg.com/leaflet@1.9.3/dist/leaflet.js"></script> <script src="https://unpkg.com/leaflet.markercluster@1.5.3/dist/leaflet.markercluster.js"></script>

<script> (function(){

 // Prüfen, ob Map-DIV vorhanden
 if (!document.getElementById('map')) return;
 // SMW-JSON einlesen und parsen
 var smwRaw = document.getElementById('smw-data').textContent.trim();
 var schoolData = [];
 try {
   // SMW gibt ein JSON-Objekt mit "results" — wir wandeln in ein Array um
   var smw = JSON.parse(smwRaw || '{}');
   // depending on SMW version, 'results' may hold items as properties
   if (smw.results) {
     for (var k in smw.results) {
       if (!smw.results.hasOwnProperty(k)) continue;
       var item = smw.results[k];
       // Extrahiere gewünschte Felder (falls MediaWiki/SMW unterschiedliche Struktur hat, anpassen)
       schoolData.push({
         link: item.fulltext || item.name || k,
         Schultyp: (item.printouts && item.printouts.Schultyp) ? item.printouts.Schultyp[0] : (item.Schultyp || ),
         Koordinaten: (item.printouts && item.printouts.Koordinaten) ? item.printouts.Koordinaten[0] : (item.Koordinaten || )
       });
     }
   } else if (Array.isArray(smw)) {
     // Falls SMW direkt ein Array liefert
     schoolData = smw;
   }
 } catch (e) {
   console.error('SMW JSON parse error', e);
 }
 // Leaflet map
 var map = L.map('map').setView([50.94, 6.96], 11);
 L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
   maxZoom: 18,
   attribution: '© OpenStreetMap contributors'
 }).addTo(map);
 // Cluster-Gruppen
 var layerGrund   = L.markerClusterGroup();
 var layerGym     = L.markerClusterGroup();
 var layerGes     = L.markerClusterGroup();
 var layerBeruf   = L.markerClusterGroup();
 var layerFoerder = L.markerClusterGroup();
 var bounds = [];
 // Helfer: Koordinaten extrahieren (String "lat,lon" oder Objekt)
 function extractCoords(coordValue){
   if (!coordValue) return null;
   if (typeof coordValue === 'string' && coordValue.indexOf(',') !== -1){
     var p = coordValue.split(',');
     var lat = parseFloat(p[0]), lon = parseFloat(p[1]);
     if (!isNaN(lat) && !isNaN(lon)) return [lat, lon];
   }
   if (typeof coordValue === 'object' && coordValue.lat && coordValue.lon){
     var la = parseFloat(coordValue.lat), lo = parseFloat(coordValue.lon);
     if (!isNaN(la) && !isNaN(lo)) return [la, lo];
   }
   return null;
 }
 // Marker erzeugen
 schoolData.forEach(function(school){
   if (!school) return;
   var coords = extractCoords(school.Koordinaten);
   if (!coords) return;
   var marker = L.marker(coords)
     .bindPopup('' + (school.link || '—') + '
' + (school.Schultyp || ));
   switch ((school.Schultyp || ).toString()){
     case "Grundschule":  layerGrund.addLayer(marker); break;
     case "Gymnasium":    layerGym.addLayer(marker); break;
     case "Gesamtschule": layerGes.addLayer(marker); break;
     case "Berufskolleg": layerBeruf.addLayer(marker); break;
     case "Förderschule": layerFoerder.addLayer(marker); break;
     default: layerGrund.addLayer(marker);
   }
   bounds.push(coords);
 });
 // Default-Layer anzeigen
 layerGrund.addTo(map);
 layerGym.addTo(map);
 // Layer-Control (Legende)
 var overlays = {
   "Grundschulen": layerGrund,
   "Gymnasien": layerGym,
   "Gesamtschulen": layerGes,
   "Berufskollegs": layerBeruf,
   "Förderschulen": layerFoerder
 };
 L.control.layers(null, overlays, {collapsed:false}).addTo(map);
 // Auto-fit bounds
 if (bounds.length) map.fitBounds(bounds);

})(); </script>

Cookies helfen uns bei der Bereitstellung von Altes Köln. Durch die Nutzung von Altes Köln erklärst du dich damit einverstanden, dass wir Cookies speichern.