Ein interaktives Dashboard zur Visualisierung und Analyse der Defibrillator-Datenqualität in der Schweiz.
Das Defikarte.ch Dashboard bietet eine umfassende Übersicht über die Qualität und Vollständigkeit der Defibrillator-Daten in allen Schweizer Kantonen. Es analysiert verschiedene Datenattribute und visualisiert die Ergebnisse in einer benutzerfreundlichen Web-Oberfläche.
- 📊 Kantone-Ranking: Sortierbare Tabelle mit Qualitätsscores aller 26 Kantone
- Klickbare Spaltenköpfe für Sortierung (aufsteigend/absteigend)
- Sortierbar nach: Name, Defis, Score, 24/7, Standort, Betreiber, Öffnungszeiten, Zugänglichkeit
- Visuelle Indikatoren für aktive Sortierung (↑↓)
- 📈 KPI-Übersicht: Wichtige Kennzahlen auf einen Blick
- Gesamtzahl Defibrillatoren
- Durchschnittlicher Qualitätsscore
- Bester Kanton
- 24/7 Verfügbarkeit (neu!)
- 📊 Wachstums-Grafik: Historische Entwicklung seit 2020
- Interaktive Linien-Grafik mit 60+ Datenpunkten
- Klickbare Datenpunkte mit Tooltip (Datum + Anzahl)
- Automatische Updates via GitHub Actions
- 🎨 Attribut-Analyse: Detaillierte Auswertung von 10 Datenattributen
- 📱 Social Media Export: Professionelle Grafiken für Social Media (1080x1080px)
- Schweizweite Übersicht
- Kantone-spezifische Grafiken mit Wappen
Besuchen Sie defikarte.ch/dashboard für eine Live-Demo.
Das Dashboard ist als Single-Page Application entwickelt:
- Vanilla JavaScript - Keine Framework-Abhängigkeiten
- HTML5 Canvas API - Für Grafik-Generierung und Wachstums-Chart
- CSS3 - Responsive Design mit Flexbox/Grid
- jsDelivr CDN - Schnelle Datenlieferung mit Cache-Busting
- GitHub Actions - Automatische monatliche Statistik-Updates
Die Daten werden von der OpenStreetMap Community erfasst und über das Repository OpenBracketsCH/defi_data bereitgestellt.
- Repository klonen:
git clone https://github.com/ihr-username/defikarte-dashboard.git
cd defikarte-dashboard- Lokalen Server starten (z.B. mit Python):
python -m http.server 8000- Dashboard im Browser öffnen:
http://localhost:8000/defikarte-dashboard.html
Das Dashboard ist eine statische HTML-Datei und kann auf jedem Webserver gehostet werden:
- GitHub Pages
- Netlify
- Vercel
- Ihr eigener Webserver
Einfach die defikarte-dashboard.html und historical-data.json hochladen und fertig!
Das Repository enthält einen GitHub Actions Workflow für automatische monatliche Updates:
-
Setup:
.github/ └── workflows/ └── update-statistics.yml -
Funktionsweise:
- Läuft automatisch am 1. jeden Monats um 09:00 UTC
- Lädt alle 26 Kantone-GeoJSON-Dateien
- Summiert die Gesamtzahl der Defibrillatoren
- Fügt neuen Datenpunkt zu
historical-data.jsonhinzu - Committed automatisch mit Nachricht: "📊 Automatisches Update: YYYY-MM-DD - XXXXX Defibrillatoren"
-
Manuelles Auslösen:
- GitHub Repository → Actions Tab
- Workflow "Update Defibrillator Statistics" auswählen
- "Run workflow" Button klicken
-
Voraussetzungen:
- Repository muss
historical-data.jsonenthalten - GitHub Actions müssen aktiviert sein
- Standard
GITHUB_TOKENhat Schreib-Rechte
- Repository muss
Das Dashboard bewertet folgende Datenattribute:
| Attribut | Gewichtung | Beschreibung |
|---|---|---|
access |
2.0 | Zugangsinformationen |
indoor |
2.0 | Innen/Außen-Kennzeichnung |
opening_hours |
1.5 | Öffnungszeiten (inkl. 24/7) |
phone |
1.0 | Kontakttelefon |
description |
1.0 | Beschreibung |
level |
0.5 | Stockwerk |
wheelchair |
0.5 | Rollstuhlzugang |
operator |
0.5 | Betreiber |
ref |
0.5 | Referenznummer |
note |
0.5 | Zusätzliche Notizen |
Der Qualitätsscore wird als gewichteter Durchschnitt berechnet:
Score = (Σ vorhandene_Attribute × Gewichtung) / (Σ alle_Gewichtungen) × 100%
Die 24/7 Verfügbarkeit zeigt den Prozentsatz der Defibrillatoren, die rund um die Uhr zugänglich sind:
- Basiert auf OpenStreetMap-Tag
opening_hours=24/7 - Wird für jeden Kanton einzeln berechnet
- Zeigt absolute Zahl und Prozentsatz
- Schweizweiter Durchschnitt in den KPIs
Das Dashboard enthält eine interaktive Wachstums-Grafik mit historischen Daten seit März 2020:
- 60+ Datenpunkte von 2020 bis heute
- Interaktive Tooltips: Hover über Datenpunkte zeigt Datum und exakte Anzahl
- Automatische Updates: Via GitHub Actions am 1. jeden Monats
- Responsive Design: Passt sich an Bildschirmgröße an
- Canvas-basiert: Keine externe Chart-Library nötig
[
{"date": "2020-03-01", "count": 2200},
{"date": "2020-08-13", "count": 3463},
...
{"date": "2026-04-01", "count": 16353}
]Falls GitHub Actions nicht verwendet werden, kann die historical-data.json manuell aktualisiert werden:
- Aktuellen Wert ermitteln (aus Dashboard oder via Overpass)
- Neuen Eintrag am Ende der JSON-Datei hinzufügen
- Datum im Format
YYYY-MM-DDverwenden - Datei speichern und deployen
Das Dashboard kann professionelle Social-Media-Grafiken erstellen:
- Schweizweite Statistiken
- KPIs (Total, Score, 24/7)
- Top-3 Attribut-Balken
- Defikarte.ch Logo
- Kantonswappen
- Großer Qualitätsscore
- Detaillierte Attribut-Balken (alle 10 Attribute)
- Anzahl Defibrillatoren
Beide Formate: 1080×1080 Pixel (optimiert für Instagram, Facebook, LinkedIn)
Die Datenquelle kann in Zeile 739 geändert werden:
const CDN = 'https://cdn.jsdelivr.net/gh/OpenBracketsCH/defi_data@main/data/json/';Das Dashboard verwendet Cache-Busting für aktuelle Daten:
const url = `${CDN}defis_kt_${canton.code}.geojson?t=${Date.now()}`;Dies stellt sicher, dass immer die neuesten Daten vom CDN geladen werden, ohne auf Browser- oder CDN-Cache zu warten.
Die Tabelle unterstützt Sortierung nach allen Spalten:
- Klick auf Spaltenköpfe aktiviert Sortierung
- Erneuter Klick auf gleiche Spalte wechselt zwischen aufsteigend (↑) und absteigend (↓)
- Standard: Score absteigend (höchster zuerst)
- Implementiert in:
sortBy()undrenderTable()Funktionen
Die Attribut-Gewichtungen können in Zeile 755 modifiziert werden:
const WEIGHTS = {
'access':2, 'indoor':2, 'opening_hours':1.5, 'phone':1,
'description':1, 'level':0.5, 'wheelchair':0.5,
'operator':0.5, 'ref':0.5, 'note':0.5
};Option 1: Automatisch (empfohlen)
- GitHub Actions Workflow läuft am 1. jeden Monats
- Keine manuelle Arbeit erforderlich
Option 2: Manuell
historical-data.jsonbearbeiten- Neuen Eintrag hinzufügen:
{"date": "2026-05-01", "count": 16500} - Nach Datum sortiert halten
- File committen und deployen
Das Dashboard erwartet GeoJSON-Dateien im folgenden Format:
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {
"emergency": "defibrillator",
"access": "yes",
"indoor": "no",
"opening_hours": "24/7",
"phone": "+41 44 123 45 67",
"description": "Beim Haupteingang",
"level": "0",
"wheelchair": "yes",
"operator": "Gemeinde Zürich",
"ref": "ZH-001",
"note": "Weitere Hinweise"
},
"geometry": {
"type": "Point",
"coordinates": [8.5417, 47.3769]
}
}
]
}Beiträge sind willkommen! So können Sie helfen:
- Datenqualität verbessern: Defibrillatoren in OpenStreetMap vervollständigen
- Code-Beiträge: Pull Requests für neue Features oder Bugfixes
- Feedback: Issues für Verbesserungsvorschläge oder Fehlerberichte
- Kein Build-Prozess erforderlich
- Vanilla JavaScript bevorzugt
- Code-Kommentare auf Deutsch oder Englisch
- Responsive Design beibehalten
Dieses Projekt steht unter der MIT License.
Die Defibrillator-Daten stammen von OpenStreetMap und unterliegen der ODbL.
- OpenStreetMap Community - Für die Erfassung der Defibrillator-Daten
- jsDelivr - Für das kostenlose CDN
- Alle Contributors - Die zur Verbesserung des Dashboards beitragen
Bei Fragen oder Anregungen:
- GitHub Issues: Issues erstellen
- Website: defikarte.ch
Das Dashboard verwendet das offizielle defikarte.ch Farbschema:
- Primärfarbe (Hellgrün):
#97C568- für Buttons, Highlights, positive Werte - Sekundärfarbe (Dunkelgrün):
#144430- für Header, Text, dunkle Elemente - Schriftart: Poppins (laut Styleguide) / Open Sans (im Dashboard)
Alle Farben sind in CSS-Variablen definiert und können zentral angepasst werden.
Hinweis: Die 24/7 Verfügbarkeit basiert auf dem Tag opening_hours=24/7 in OpenStreetMap. Bitte verifizieren Sie vor Ort, ob ein Defibrillator tatsächlich rund um die Uhr zugänglich ist.