lsa-planer

LSA-Planer Professional – Planungssoftware für Lichtsignalanlagen nach RiLSA 2015 und § 45 StVO. EUPL-1.2.

/ tests services kartendiensteBodenaufloesung.test.ts

2,2 KB Rohdatei
tests/services/kartendiensteBodenaufloesung.test.ts — 51 Zeilen
1 import { describe, expect, it } from 'vitest';
2 import {
3 MAX_MOSAIK_KANTE,
4 STANDARD_DIENST,
5 baueKachelplan,
6 dienstMit,
7 } from '@/services/kartendienste';
8
9 /*
10 * Befund 51 zur Fassung 5.9.0.
11 *
12 * Zugesagt war: "Bis 1000 m Kantenlaenge liefert damit jeder Dienst seine volle
13 * Bodenaufloesung." Fuer den VOREINGESTELLTEN Dienst (Nordrhein-Westfalen,
14 * 10 cm) ist das falsch - 1000 m brauchten 10000 Bildpunkte, MAX_MOSAIK_KANTE
15 * kappt bei 7000, es bleiben 14,3 cm je Bildpunkt. Der Kommentar an
16 * MAX_MOSAIK_KANTE nennt genau diesen Satz und verwirft ihn.
17 *
18 * Das wiegt, weil aus dem Bild Raeumwege abgegriffen werden: Wer sich auf die
19 * Zusage verlaesst, haelt einen 1000-m-Ausschnitt in Nordrhein-Westfalen fuer
20 * 10-cm-Material und unterschaetzt die Streuung des abgegriffenen Weges.
21 *
22 * Die Faelle rechnen die Grenze aus dem Quelltext aus: Bis zu welcher
23 * Kantenlaenge ein Dienst seine volle Bodenaufloesung liefert, ist
24 * MAX_MOSAIK_KANTE * aufloesung.
25 */
26
27 const KNOTEN = { breite: 50.9412784, laenge: 6.9582814 };
28
29 /** Groesste Kantenlaenge in Metern, bei der ein Dienst noch voll aufloest. */
30 function volleAufloesungBis(aufloesung: number): number {
31 return MAX_MOSAIK_KANTE * aufloesung;
32 }
33
34 describe('Bodenaufloesung des Mosaiks - der Sachstand', () => {
35 it('schoepft der voreingestellte Dienst bei 1000 m seine Aufloesung NICHT aus', () => {
36 const nrw = dienstMit(STANDARD_DIENST);
37 expect(nrw.aufloesung, 'Aufloesung des voreingestellten Dienstes').toBe(0.1);
38 const plan = baueKachelplan({ dienst: nrw, mitte: KNOTEN, kantenlaenge: 1000 });
39 expect(plan.bildkante, 'Kappung durch MAX_MOSAIK_KANTE').toBe(MAX_MOSAIK_KANTE);
40 expect(plan.meterJeBildpunkt).toBeGreaterThan(nrw.aufloesung);
41 expect(plan.meterJeBildpunkt).toBeCloseTo(1000 / 7000, 9);
42 });
43
44 it('reichen 7000 Bildpunkte fuer 20 cm bis 1400 m und fuer 10 cm bis 700 m', () => {
45 expect(volleAufloesungBis(0.2)).toBe(1400);
46 expect(volleAufloesungBis(0.1)).toBe(700);
47 const nrw = dienstMit(STANDARD_DIENST);
48 const gerade = baueKachelplan({ dienst: nrw, mitte: KNOTEN, kantenlaenge: 700 });
49 expect(gerade.meterJeBildpunkt, 'bei 700 m noch volle Aufloesung').toBeCloseTo(0.1, 9);
50 });
51 });