Widget:Schulkarte2: Unterschied zwischen den Versionen
Aus Altes Köln
HorstR (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „<?php →* * Widget: Schulkarte * * Zeigt eine Leaflet Karte mit Marker basierend auf SMW-Daten *: ?> <!-- MAP CONTAINER --> <div id="map" style="height: 450px; border:1px solid #ccc;"></div> <div id="map-debug" style="font-size:12px; background:#eee; padding:5px; margin-top:5px;"></div> <!-- Leaflet laden --> <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.3/dist/leaflet.css" /> <script src="https://unpkg.com/leaflet@1.9.3/dist/leaflet…“) |
HorstR (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
| Zeile 3: | Zeile 3: | ||
* Widget: Schulkarte | * Widget: Schulkarte | ||
* | * | ||
* Zeigt | * Zeigt alle Schulen aus SMW auf einer Leaflet-Karte | ||
*/ | */ | ||
?> | ?> | ||
<!-- MAP CONTAINER --> | <!-- MAP CONTAINER --> | ||
<div id="map" style="height: | <div id="map" style="height:500px; border:1px solid #ccc;"></div> | ||
<!-- Leaflet | <!-- Leaflet CSS/JS --> | ||
<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" /> | ||
<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@1.5.3/dist/leaflet.markercluster.js"></script> | |||
<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> | <script> | ||
document.addEventListener("DOMContentLoaded", function () { | |||
function | // SMW JSON lesen | ||
// JSON | |||
var el = document.getElementById('smw-data'); | var el = document.getElementById('smw-data'); | ||
if (!el) { | if (!el) { | ||
console.error("❌ Kein smw-data Element gefunden!"); | |||
return | return; | ||
} | } | ||
var raw = el.textContent.trim(); | var raw = el.textContent.trim(); | ||
if (!raw) { | |||
console.error("❌ smw-data leer!"); | |||
return; | |||
} | |||
var smw; | |||
try { | try { | ||
smw = JSON.parse(raw); | |||
} catch (e) { | } catch(e) { | ||
console.error("❌ JSON Parse Fehler:", e, raw); | |||
return | return; | ||
} | } | ||
if ( | if (!smw.results) { | ||
console.error("⚠️ Keine Ergebnisse in JSON"); | |||
return; | return; | ||
} | } | ||
// Karte anlegen | // Karte anlegen | ||
var map = L.map('map').setView([50.94, 6.95], 11); | var map = L.map('map').setView([50.94, 6.95], 11); | ||
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { | L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { | ||
maxZoom: 18 | maxZoom: 18, | ||
attribution: '© OpenStreetMap contributors' | |||
}).addTo(map); | }).addTo(map); | ||
// Marker-Cluster | |||
var markers = L.markerClusterGroup(); | |||
// Marker setzen | // Marker setzen | ||
Object.keys(smw.results).forEach(function ( | Object.keys(smw.results).forEach(function(title) { | ||
var d = smw.results[ | var d = smw.results[title].printouts; | ||
if (!d.Koordinaten || !d.Schule) return; | if (!d.Koordinaten || !d.Schule) return; | ||
var | var coords = d.Koordinaten[0].split(','); | ||
if (coords.length !== 2) return; | |||
var lat = parseFloat(coords[0]); | |||
var lon = parseFloat(coords[1]); | |||
var lat = parseFloat( | |||
var lon = parseFloat( | |||
var name = d.Schule[0]; | var name = d.Schule[0]; | ||
var typ = (d.Schultyp && d.Schultyp[0]) ? d.Schultyp[0] : "Unbekannt"; | |||
var marker = L.marker([lat, lon]).bindPopup("<strong>" + name + "</strong><br/>" + typ); | |||
markers.addLayer(marker); | |||
}); | |||
map.addLayer(markers); | |||
// Auto-Zoom auf alle Marker | |||
if (markers.getLayers().length > 0) { | |||
map.fitBounds(markers.getBounds().pad(0.2)); | |||
} | |||
}); | }); | ||
</script> | </script> | ||
Version vom 8. Dezember 2025, 10:42 Uhr
<?php /**
* Widget: Schulkarte * * Zeigt alle Schulen aus SMW auf einer Leaflet-Karte */
?>
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.3/dist/leaflet.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> <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> document.addEventListener("DOMContentLoaded", function () {
// SMW JSON lesen
var el = document.getElementById('smw-data');
if (!el) {
console.error("❌ Kein smw-data Element gefunden!");
return;
}
var raw = el.textContent.trim();
if (!raw) {
console.error("❌ smw-data leer!");
return;
}
var smw;
try {
smw = JSON.parse(raw);
} catch(e) {
console.error("❌ JSON Parse Fehler:", e, raw);
return;
}
if (!smw.results) {
console.error("⚠️ Keine Ergebnisse in JSON");
return;
}
// Karte anlegen
var map = L.map('map').setView([50.94, 6.95], 11);
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 18,
attribution: '© OpenStreetMap contributors'
}).addTo(map);
// Marker-Cluster var markers = L.markerClusterGroup();
// Marker setzen
Object.keys(smw.results).forEach(function(title) {
var d = smw.results[title].printouts;
if (!d.Koordinaten || !d.Schule) return;
var coords = d.Koordinaten[0].split(',');
if (coords.length !== 2) return;
var lat = parseFloat(coords[0]);
var lon = parseFloat(coords[1]);
var name = d.Schule[0];
var typ = (d.Schultyp && d.Schultyp[0]) ? d.Schultyp[0] : "Unbekannt";
var marker = L.marker([lat, lon]).bindPopup("" + name + "
" + typ);
markers.addLayer(marker);
});
map.addLayer(markers);
// Auto-Zoom auf alle Marker
if (markers.getLayers().length > 0) {
map.fitBounds(markers.getBounds().pad(0.2));
}
}); </script>
