Kartenmodule ergaenzen
Phase 6: alles, was einen Ort hat — Loeschwasser, Objekte mit Feuerwehrplan, die Lagekarte eines Einsatzes und die geplante Foerderstrecke. Keine Kacheln aus dem Netz. Wo eine Wehr ausrueckt und wo ihre Hydranten liegen, ist niemandes Geschaeft; der Kartenserver laeuft selbst (tileserver-gl im Compose-Profil "karte"). Ohne ihn zeigt die Karte einen leeren Grund und sagt das auch — Punkte, Entfernungen und Umkreissuche funktionieren trotzdem. Dasselbe gilt fuer einen eingetragenen, aber nicht erreichbaren Server. Die Umkreissuche laeuft ueber PostGIS: ST_DWithin auf der Geografie mit GiST-Index rechnet in Metern und nutzt den Index. Gefragt wird waehrend der Fahrt, und bei tausend Hydranten waere alles andere ein vollstaendiger Tabellendurchlauf. Der Import aus GeoJSON und Stadtwerke-CSV ist nachsichtig, aber ehrlich: er erkennt "DN 100", deutsche Kommazahlen, Datumsangaben und vertauschte Achsen — raet aber nichts. Fehlt die Position, wird die Zeile uebersprungen; ohne Statusangabe steht "ungeprueft", nicht "einsatzbereit". 22 taktische Zeichen nach FwDV 102 selbst gezeichnet, die Lagekarte gleicht ueber denselben Ereignisstrom ab wie die Atemschutzueberwachung. Die Wasserfoerderung rechnet Reibung, Hoehe und Pumpenzahl; das Ergebnis wird nie gespeichert, sondern bei jeder Anzeige neu gerechnet. Geht eine Strecke nicht auf, sagt die Ausgabe das. Behoben: die Reibungsbeiwerte lagen im ersten Wurf um den Faktor zehn daneben. Aufgefallen ist es nur, weil die Tests gegen die Tabellenwerte der Ausbildung pruefen und nicht gegen die eigene Implementierung. Dazu ein Abruf fuer abgelegte Dateien (/api/dateien/[id]) — bis hierher gab es nur den Upload. 59 neue Tests (48 Unit, 11 E2E je Browser). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
e1480c0c3e
commit
1c1e141666
+111
-1
@@ -8,7 +8,117 @@ Die Regeln dazu stehen in [docs/VERSIONIERUNG.md](docs/VERSIONIERUNG.md).
|
||||
|
||||
## [Unveröffentlicht]
|
||||
|
||||
Nächster Schritt ist Phase 6 (Kartenmodule).
|
||||
Nächster Schritt ist Phase 7 (Benachrichtigungen und Termine).
|
||||
|
||||
---
|
||||
|
||||
## [0.7.0] — 2026-09-04
|
||||
|
||||
Phase 6: Kartenmodule. Ab hier weiß die Wehr auf der Anfahrt, wo der nächste
|
||||
Hydrant liegt und was er hergibt.
|
||||
|
||||
**Keine Kacheln aus dem Netz.** Wo eine Wehr ausrückt, wo ihre Hydranten liegen
|
||||
und welche Objekte sie im Blick hat, ist niemandes Geschäft. Der Kartenserver
|
||||
läuft selbst (tileserver-gl im Compose-Profil `karte`); ohne ihn zeigt die
|
||||
Karte einen leeren Grund und sagt das auch — Punkte, Entfernungen und
|
||||
Umkreissuche funktionieren trotzdem.
|
||||
|
||||
### Hinzugefügt
|
||||
|
||||
**Datenmodell**
|
||||
|
||||
- `Hydrant` mit Typ (Unterflur, Überflur, Saugstelle, Zisterne, offenes
|
||||
Gewässer), Nennweite, Durchfluss, Zustand, letzter Prüfung und Hinweis für
|
||||
das, was man vor Ort wissen muss.
|
||||
- `Objekt` mit Kategorie, **Zufahrt, Gefahren und Schlüsseldepot als eigene
|
||||
Felder** — im Einsatz sucht niemand in einem Absatz. Dazu `Objektkontakt`
|
||||
(mit „jederzeit erreichbar") und `Objektplan` (DIN 14095).
|
||||
- `Lagekarte` und `Lageelement` — eine Karte je Einsatz, jedes Element mit
|
||||
Geometrie, Zeichen und Urheber.
|
||||
- `Wasserfoerderung` und `Foerderpunkt` — die Eingaben einer Förderstrecke.
|
||||
Das Ergebnis wird **nicht** gespeichert, sondern bei jeder Anzeige neu
|
||||
gerechnet.
|
||||
- Standorte haben jetzt Dezimalgrade neben dem PostGIS-Punkt und liegen damit
|
||||
auf der Karte.
|
||||
|
||||
**Karte**
|
||||
|
||||
- MapLibre GL aus dem eigenen Paketstand, Kacheln aus dem eigenen
|
||||
tileserver-gl. Kein Skript, kein Stylesheet, kein Bild von einem fremden
|
||||
Server.
|
||||
- Hydranten und Objekte als getrennt schaltbare Ebenen, Filter nach Art und
|
||||
Zustand, Suche über Straße, Nummer, Objektname und Gefahrenstichwort.
|
||||
- **Umkreissuche über PostGIS**: `ST_DWithin` auf der Geografie mit
|
||||
GiST-Index — in die Karte tippen, und es steht da, was in 500 Metern
|
||||
erreichbar ist, nach Entfernung sortiert.
|
||||
|
||||
**Import**
|
||||
|
||||
- GeoJSON und Tabellen der Stadtwerke. Spaltennamen werden erkannt („DN",
|
||||
„Lage", „Latitude", „Pruefdatum"), deutsche Kommazahlen und Datumsangaben
|
||||
ebenso, vertauschte Achsen werden erkannt und zurückgedreht.
|
||||
- Zwei Schritte wie beim Geräteimport aus Phase 1: erst zeigen, was
|
||||
herauskäme, dann übernehmen. Übersprungene Zeilen stehen mit Zeilennummer
|
||||
und Grund da.
|
||||
- Wiederholbar: Hydranten mit einer Nummer des Versorgers werden aktualisiert
|
||||
statt doppelt angelegt.
|
||||
|
||||
**Objekte und Feuerwehrpläne**
|
||||
|
||||
- Zufahrt, Gefahren, Schlüsseldepot und Löschwasser am Objekt stehen ganz
|
||||
oben — in dieser Reihenfolge werden sie auf der Anfahrt gelesen.
|
||||
- Ansprechpartner mit Telefonnummern zum Antippen und der Angabe, wer nachts
|
||||
ans Telefon geht.
|
||||
- Planblätter nach DIN 14095 mit Art und Stand. Ein Plan von 2009 ist eine
|
||||
Vermutung, und das steht dran.
|
||||
|
||||
**Lagekarte**
|
||||
|
||||
- 22 taktische Zeichen nach FwDV 102, **selbst gezeichnet** als SVG in
|
||||
`lib/karte/taktische-zeichen.ts`: Fahrzeuge, Einheiten, Führung, Stellen,
|
||||
Gefahren, Maßnahmen.
|
||||
- Zeichen setzen, Linien ziehen, Flächen aufziehen, beschriften — ein
|
||||
Werkzeug, ein Klick.
|
||||
- Abgleich zwischen Geräten über denselben Ereignisstrom wie die
|
||||
Atemschutzüberwachung aus Phase 5; der Zustand der Verbindung steht sichtbar
|
||||
da.
|
||||
- Zurücknehmen statt löschen: was um 14:12 eingezeichnet wurde, gehört zur
|
||||
Mitschrift.
|
||||
|
||||
**Wasserförderung**
|
||||
|
||||
- Strecke in die Karte tippen, Durchmesser und Fördermenge einstellen — die
|
||||
Rechnung läuft mit: Reibungsverlust, Höhenunterschied, Zahl der
|
||||
Verstärkerpumpen, Schlauchlängen je Abschnitt.
|
||||
- Gerechnet wird im Browser **und** auf dem Server mit demselben Code.
|
||||
- Reicht ein Abschnitt selbst mit voller Pumpe nicht, sagt die Ausgabe das,
|
||||
statt eine Zahl auszuwerfen, die niemand halten kann.
|
||||
- Unter jeder Rechnung steht, dass sie eine Planungshilfe ist — was zählt, ist
|
||||
der Druck am Verteiler.
|
||||
|
||||
**Dateien abrufen**
|
||||
|
||||
- `/api/dateien/[id]` liefert eine abgelegte Datei aus, mandantengebunden und
|
||||
mit Eintrag im Protokoll. Bis Phase 6 gab es nur den Upload und eigene
|
||||
Endpunkte je Dokumentart.
|
||||
|
||||
**Sonstiges**
|
||||
|
||||
- Der Seed legt 24 Löschwasserstellen an — mit Weiher, Zisterne und
|
||||
Saugstelle im Außenbereich, zwei defekten und zwei ungeprüften — sowie drei
|
||||
Objekte mit Ansprechpartnern: Schule, Pflegeheim, Aussiedlerhof.
|
||||
- 59 neue Tests: 48 Unit-Tests zu Druckverlust, Förderplan und Import,
|
||||
11 Playwright-Durchläufe je Browser.
|
||||
|
||||
### Geändert
|
||||
|
||||
- Der Koordinaten-Trigger aus Phase 3 ist jetzt allgemein: eine Funktion für
|
||||
jede Tabelle mit Breiten- und Längengrad. Sie hängt an Standort, Hydrant und
|
||||
Objekt.
|
||||
- Der Ereignisstrom-Hook aus Phase 5 nimmt jetzt eine Adresse entgegen und
|
||||
wird von Lagekarte und Atemschutzüberwachung gemeinsam benutzt. Zwei Ströme
|
||||
mit unterschiedlichem Verhalten wären ein Ort mehr, an dem sich ein Fehler
|
||||
verstecken kann.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user