- Go 82.4%
- HTML 17.6%
| .DS_Store | ||
| .gitignore | ||
| CLAUDE.md | ||
| config.example.yaml | ||
| config.yaml | ||
| go.mod | ||
| go.sum | ||
| kfz_data.go | ||
| main.go | ||
| README.md | ||
| template.html | ||
Deutschlandkarte
Ein Go-CLI, das aus einer YAML-Konfiguration eine eigenständige interaktive Landkreis-Karte Deutschlands als HTML-Datei erzeugt. Jeder Eintrag in der Konfiguration bündelt mehrere KFZ-Kennzeichen unter einem gemeinsamen Titel, einer Beschreibung, einem Link und optional einem Logo. Beim Hovern eines markierten Landkreises erscheint ein Tooltip; ein Klick öffnet den Link in einem neuen Tab.
Die Ausgabe enthält D3.js, die GeoJSON-Daten und die Item-Daten inline und funktioniert daher ohne Internetverbindung.
Aufbau
GOTOOLCHAIN=local go build -o deutschlandkarte .
./deutschlandkarte config.example.yaml # erzeugt map.html (~1,4 MB)
open map.html
GOTOOLCHAIN=local verhindert, dass Go beim Auflösen der Dependencies eine
neuere Toolchain herunterlädt; die Module sind auf Go 1.24 abgestimmt
(golang.org/x/text@v0.21, gopkg.in/yaml.v3).
YAML-Konfiguration
title: Beispielkarte
subtitle: Demo-Konfiguration
items:
- title: Frankfurt-Rhein-Main
description: Metropolregion am Main
link: https://example.com
logo: https://example.com/logo.png # optional
kfzKennzeichen: [HG, F, MTK, OF, WI]
- title: Köln/Bonn
description: Rheinland
link: https://example.com
kfzKennzeichen: [K, BN, SU, GL, LEV, GM]
items darf weggelassen werden – eine reine Top-Level-Liste funktioniert
ebenfalls. Pro Item wird ein Tooltip erzeugt; alle aufgelisteten
Kennzeichen werden auf der Karte gemeinsam markiert und teilen sich diesen
Tooltip.
Befehle
./deutschlandkarte config.yaml # Standard-Lauf
./deutschlandkarte -o out.html config.yaml # eigener Ausgabepfad
./deutschlandkarte -t my_template.html config.yaml # eigenes HTML-Template
./deutschlandkarte --kfz-data extras.yaml config.yaml # KFZ-Tabelle erweitern
./deutschlandkarte --list-kfz # alle bekannten KFZ ausgeben
./deutschlandkarte --check-kfz # Tabelle gegen GeoJSON prüfen
KFZ-Kennzeichen
Eingebaut sind 407 Einträge (alle 16 Bundesländer, Hauptkennzeichen plus
gängige Hilfskennzeichen) in kfz_data.go. Jedes Kennzeichen ist auf einen
oder mehrere Suchbegriffe abgebildet, die per Substring-Match (oder
Exakt-Match mit =-Präfix) gegen feature.properties.NAME_3 der GeoJSON
geprüft werden – diakritik- und groß-/kleinschreibungs-unabhängig.
Soll ein Kennzeichen hinzugefügt oder überschrieben werden, ohne das Programm neu zu kompilieren, wird eine eigene YAML-Datei mitgegeben:
# extras.yaml
XX: [Suchbegriff, =Genauer Begriff]
YY: [=Kreisname Städte]
./deutschlandkarte --kfz-data extras.yaml config.yaml
Geodaten
Die GeoJSON wird einmalig von
isellsoap/deutschlandGeoJSON
heruntergeladen und in .cache/4_niedrig.geo.json zwischengespeichert
(~1,1 MB). Höhere Auflösungen (3_mittel, 2_hoch) sind über die Konstanten
geojsonURL und geojsonName in main.go einstellbar.
Einbettung als Overlay
index.html zeigt eine Beispielseite, die die Karte per <iframe> als
halbtransparentes Overlay über einem Hintergrundbild lädt. Die Transparenz
steuert das body { background: rgba(15, 15, 15, ALPHA); } in
template.html. Districts ohne Markierung verwenden --region-fill: transparent, damit die Seite hinter der Karte sichtbar bleibt.
Dateien
main.go CLI: Flags, Fetch, Auflösung, Rendering
kfz_data.go eingebaute KFZ → Suchbegriff-Tabelle (~400 Einträge)
template.html HTML/CSS/JS-Template mit Platzhaltern
config.example.yaml Beispielkonfiguration
index.html Beispiel-Hostseite mit Overlay-Einbettung
.cache/ gecachte GeoJSON + D3
Die Platzhalter im Template:
| Platzhalter | Wird ersetzt durch |
|---|---|
__TITLE__ |
HTML-escaped cfg.Title |
__SUBTITLE__ |
HTML-escaped cfg.Subtitle |
/*__D3__*/ |
inlined D3.js v7.8.5 |
/*__GEOJSON__*/ |
inlined Feature-Collection |
/*__ITEMS__*/ |
JSON-Array der aufgelösten Items |
Lizenz / Datenherkunft
Geodaten: GADM via isellsoap/deutschlandGeoJSON (archiviert, stabil).
D3.js: BSD-3-Clause.