Die erste Entscheidung fällt vor der Karte: Die Seite lädt kein Kartenskript,
solange niemand es angefordert hat. An der Stelle, an der später die Karte steht, steht zunächst
ein Platzhalter — ein statisches Kartenbild vom eigenen Server oder ein Adressblock mit Anschrift,
Öffnungszeiten und Routenlink, dazu ein Schalter zum Laden. Wird er betätigt, kommt das Skript nach
und die Karte erscheint an derselben Stelle, im selben Container, ohne dass etwas verspringt.
Die zweite Entscheidung betrifft die Datenhaltung. Standorte sind Inhalte,
keine Konfiguration — sie gehören ins
CMS, als eigene Inhaltsart mit Feldern für Name,
Adresse, Öffnungszeiten, Telefon, Kategorie und Koordinaten. Die Redaktion legt eine neue Filiale
an, und sie erscheint auf der Karte und in der Liste. Niemand fasst dafür Code an, und niemand
pflegt Koordinaten von Hand.
Denn die Koordinaten kommen aus dem Geocoding — und das läuft serverseitig.
Beim Speichern eines Standorts oder in einem geplanten Lauf wird die Adresse einmal in Länge und
Breite übersetzt und das Ergebnis in den Datensatz geschrieben. Danach arbeitet die Website mit
diesen Werten weiter. So geht nicht bei jedem Seitenaufruf eine Anfrage raus, und die Standorte
stehen auch dann auf der Seite, wenn der Dienst gerade nicht antwortet.
Der API-Schlüssel wird dabei getrennt behandelt. Der Schlüssel für die
Karte im Browser ist naturgemäß sichtbar, deshalb wird er auf die eigene Domain als HTTP-Referrer
und auf die tatsächlich genutzten Dienste beschränkt. Der Schlüssel fürs Geocoding bleibt auf dem
Server, beschränkt auf dessen IP-Adresse, und taucht im Quelltext der Seite gar nicht erst auf.
Google empfiehlt beides ausdrücklich und weist darauf hin, dass der Betreiber für Kosten haftet,
die durch Missbrauch unbeschränkter Schlüssel entstehen.
Und schließlich das, was oft fehlt: der zweite Zugang. Neben der Karte steht
eine Liste der Standorte als echter Text — Adresse, Zeiten, Telefon, Routenlink, per Tastatur
erreichbar. Sie kommt aus denselben CMS-Feldern wie die Marker, ist also kein Nebenprodukt, sondern
dieselben Daten in anderer Darstellung. Mehr dazu unter
Barrierefreiheit im Stack.