import { describe, expect, it } from 'vitest'; import { MAX_MOSAIK_KANTE, STANDARD_DIENST, baueKachelplan, dienstMit, } from '@/services/kartendienste'; /* * Befund 51 zur Fassung 5.9.0. * * Zugesagt war: "Bis 1000 m Kantenlaenge liefert damit jeder Dienst seine volle * Bodenaufloesung." Fuer den VOREINGESTELLTEN Dienst (Nordrhein-Westfalen, * 10 cm) ist das falsch - 1000 m brauchten 10000 Bildpunkte, MAX_MOSAIK_KANTE * kappt bei 7000, es bleiben 14,3 cm je Bildpunkt. Der Kommentar an * MAX_MOSAIK_KANTE nennt genau diesen Satz und verwirft ihn. * * Das wiegt, weil aus dem Bild Raeumwege abgegriffen werden: Wer sich auf die * Zusage verlaesst, haelt einen 1000-m-Ausschnitt in Nordrhein-Westfalen fuer * 10-cm-Material und unterschaetzt die Streuung des abgegriffenen Weges. * * Die Faelle rechnen die Grenze aus dem Quelltext aus: Bis zu welcher * Kantenlaenge ein Dienst seine volle Bodenaufloesung liefert, ist * MAX_MOSAIK_KANTE * aufloesung. */ const KNOTEN = { breite: 50.9412784, laenge: 6.9582814 }; /** Groesste Kantenlaenge in Metern, bei der ein Dienst noch voll aufloest. */ function volleAufloesungBis(aufloesung: number): number { return MAX_MOSAIK_KANTE * aufloesung; } describe('Bodenaufloesung des Mosaiks - der Sachstand', () => { it('schoepft der voreingestellte Dienst bei 1000 m seine Aufloesung NICHT aus', () => { const nrw = dienstMit(STANDARD_DIENST); expect(nrw.aufloesung, 'Aufloesung des voreingestellten Dienstes').toBe(0.1); const plan = baueKachelplan({ dienst: nrw, mitte: KNOTEN, kantenlaenge: 1000 }); expect(plan.bildkante, 'Kappung durch MAX_MOSAIK_KANTE').toBe(MAX_MOSAIK_KANTE); expect(plan.meterJeBildpunkt).toBeGreaterThan(nrw.aufloesung); expect(plan.meterJeBildpunkt).toBeCloseTo(1000 / 7000, 9); }); it('reichen 7000 Bildpunkte fuer 20 cm bis 1400 m und fuer 10 cm bis 700 m', () => { expect(volleAufloesungBis(0.2)).toBe(1400); expect(volleAufloesungBis(0.1)).toBe(700); const nrw = dienstMit(STANDARD_DIENST); const gerade = baueKachelplan({ dienst: nrw, mitte: KNOTEN, kantenlaenge: 700 }); expect(gerade.meterJeBildpunkt, 'bei 700 m noch volle Aufloesung').toBeCloseTo(0.1, 9); }); });