Karte: die Welt ist doppelt so breit wie mapSize
Deploy / check (push) Has been cancelled
Deploy / deploy (push) Has been cancelled

Die Parzellen lagen im Wald. Ich hatte -mapSize/2 bis +mapSize/2 angenommen —
naheliegend beim Namen, aber falsch: die Koordinaten laufen von -mapSize bis
+mapSize. Damit wurde jede Parzelle um Faktor zwei vom Mittelpunkt weggezogen.

Schlimmer als der Fehler war meine Pruefung. Der Zonentest hat die Koordinaten
auf ihre eigene Bounding-Box normiert und danach geschaut, ob die Felder in der
richtigen Ecke liegen. Das besteht bei JEDEM Massstab, weil die Anordnung
zueinander ja stimmt. 14 von 15 Treffern klangen ueberzeugend und sagten
ueber den Massstab genau nichts aus.

Gemessen wurde es dann so: die eingebrannte Legende steht sowohl im Feed-Bild
als auch im Ingame-Screenshot, damit laesst sich der eine aufs andere
umrechnen. Vier Parzellen an den vier Ecken ergaben eine Weltbreite von 7822
bei mapSize 4096 — Faktor 1,91 bei rund 5 Prozent Ablesegenauigkeit.

Dabei ist noch etwas herausgekommen: die Marken H1..H8 auf dem Luftbild sind
als Passpunkte hervorragend, nicht wertlos, wie ich in der Doku behauptet
hatte. Mit richtigem Massstab liegen alle acht Hofparzellen unter 13 px von
ihrer Marke; mit falschem rund 200. Das ist jetzt der Test — acht Passpunkte,
die jede kuenftige Verschiebung sofort auffliegen lassen, statt eines
Zonenvergleichs, der alles durchwinkt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-09 01:59:21 +02:00
co-authored by Claude Opus 5
parent e215cd4c7c
commit 768fcda666
2 changed files with 34 additions and 13 deletions
+16 -4
View File
@@ -161,12 +161,24 @@ export const hofFarbe = (hof) => HOF_FARBEN[(hof - 1) % HOF_FARBEN.length];
const esc = (s) => String(s).replace(/[<>&"']/g, (c) =>
({ '<': '&lt;', '>': '&gt;', '&': '&amp;', '"': '&quot;', "'": '&apos;' }[c]));
/**
* Wie breit ist die Welt auf dem Luftbild?
*
* Nicht `mapSize`, sondern das Doppelte: die Koordinaten laufen von -mapSize
* bis +mapSize. Gemessen, nicht geraten — vier Parzellen an den vier Ecken
* gegen die Ingame-Karte gerechnet ergaben 7822 bei mapSize 4096, also
* Faktor 1,91 bei einer Ablesegenauigkeit von rund 5 %.
*
* Wer -mapSize/2..+mapSize/2 annimmt, zieht alles um Faktor zwei vom
* Mittelpunkt weg. Das sieht auf den ersten Blick plausibel aus, weil die
* Anordnung zueinander stimmt — nur liegt dann jede Parzelle im Wald.
*/
export const WELT_FAKTOR = 2;
/**
* Die Karte als SVG.
*
* Weltkoordinaten laufen von -groesse/2 bis +groesse/2; x nach rechts, z nach
* unten, linear über das ganze Luftbild. Das ist gegen die Ingame-Karte
* geprüft: 14 von 15 markanten Feldnummern landen in der richtigen Zone.
* x nach rechts, z nach unten, linear über das ganze Luftbild.
*
* @param {object} stand Ergebnis von statsLesen()
* @param {string} bildB64 Luftbild vom Server als base64-JPEG
@@ -174,7 +186,7 @@ const esc = (s) => String(s).replace(/[<>&"']/g, (c) =>
* @param {Record<number,string>} namen Hof-Nummer → Anzeigename
*/
export function karteSvg(stand, bildB64, S = 1024, namen = {}) {
const G = stand.groesse;
const G = stand.groesse * WELT_FAKTOR;
const px = (w) => ((w + G / 2) / G) * S;
const teile = [];