Files
gta6/public/data/vice-a/chunk_7_5.json
T
knsoandClaude Sonnet 5 22ac8f530c fix(extract): Polygonlöcher im Chunk-Payload erhalten, split_by_chunk_all abdecken
Ruling 34 (Important, Fix-Runde 1 zu Aufgabe 6): _ring() verwarf jedes Loch
eines Polygons (nur poly.exterior wurde in Weltkoordinaten -> three.js
uebertragen). Vor dem Chunk-Zuschnitt war das meist harmlos, weil das
groesste Loch die Bucht selbst ist und beim Zuschneiden ohnehin herausfaellt
- danach blieb es aber ein echter Datenverlust: ein von Strassen umschlossener
Block wurde zu Asphalt, ein Innenhof zu Gebaeudemasse, ein Teich im Park zu
Wiese. Gemessen an echten Daten: 120 Strassen-Chunk-Stuecke (449.876 m2),
127 Stadtflaechen-Stuecke (208.657 m2 wobei 1 weiteres Park-Stueck), 30
Land-Stuecke (11.402 m2) und mindestens 75 Gebaeude-Stuecke trugen ein
verworfenes Loch.

_ring() wird _rings(): liefert [poly.exterior, *poly.interiors] in derselben
Transformation, Aussenring zuerst. Payload-Schema aendert sich entsprechend
fuer land/surfaces/roads/buildings von einem flachen Ring zu einer Liste von
Ringen; centerlines und palms sind unveraendert (keine Polygone). Task 7s
extrudePolygons() ruft ShapeUtils.triangulateShape(ring, []) bereits mit
einem (bisher leeren) Loecher-Array - die Aenderung passt jetzt durchgehend,
bevor Aufgabe 7 gebaut wird. write_debug_png() zeichnet weiterhin nur den
Aussenring (poly[0]), Loecher werden im Debug-Bild nicht dargestellt.

Neuer Test test_polygon_holes_survive_into_the_payload prueft das direkt an
einem Block mit Loch; die Koordinaten wurden vor dem Festschreiben gegen die
tatsaechliche chunk_payload()-Transformation nachgerechnet (uv run python,
nicht nur von Hand). test_coordinates_are_chunk_local_three_js musste auf
das neue [0]-Aussenring-Indexing angepasst werden.

Ruling 35 (Important): split_by_chunk_all() - die Variante, die run.py
tatsaechlich benutzt, nicht das getestete split_by_chunk() - hatte einen
MultiPolygon-Zweig ohne jede Testabdeckung. Neuer Test mit einer Klammerform
(Steg ausserhalb der Chunk-Zelle, zwei Zinken je einmal hineinreichend)
trifft genau diesen Zweig gezielt; er war schon vor der Aenderung gruen -
bestaetigt als Abdeckungsluecke, nicht als Bug.

uv run pytest -v: 36 passed (34 zuvor + 2 neu).

Pipeline (run.py) am gecachten Mosaik neu durchlaufen: weiterhin 144
Chunk-Dateien, public/data/vice-a/ jetzt 2,7 MB (zuvor 2,5 MB; +0,2 MB fuer
die erhaltenen Loecher). Insgesamt tragen jetzt 415 Chunk-Stuecke mindestens
ein Loch: Land 30/213, Stadtflaechen 127/1145 (+1 Park-Flaeche), Strassen
120/953, Gebaeude 137/2859 (80 global-eindeutige Gebaeude vor
Chunk-Duplizierung). Land/Strassen/Stadtflaechen treffen die oben genannten
Referenzwerte exakt; bei Gebaeuden weicht die Stueckzahl vom Review-Befund
(75) ab. Stichprobe der vier flaechenmaessig groessten Gebaeude-Loecher
(Debug-PNGs chunk_8_0, chunk_2_10, chunk_5_11 sowie ein viertes) zeigt
plausible echte Ring-Bauwerke (ein stadionartiger Rundbau, eine
Wendel-Parkrampe) statt offensichtlicher Fehlklassifikation - die
verbleibende Abweichung duerfte an der bereits im Task-6-Bericht
offengelegten Restunsicherheit der Gebaeude-Ueberlappungsrekonstruktion
liegen (263 vs. 258 spekulative Gebaeude), nicht an dieser Aenderung; im
Fix-Bericht dokumentiert.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-12 17:23:31 +02:00

1 line
2.9 KiB
JSON

{"chunk":[7,5],"origin":[750,-1250],"land":[[[[164.0,3.5],[158.0,2.5],[152.0,5.5],[146.0,5.5],[139.0,9.5],[131.0,10.5],[110.0,17.5],[73.0,17.5],[51.0,10.5],[35.0,0.5],[34.5,0.0],[168.38,0.0],[164.0,3.5]]]],"surfaces":[{"poly":[[[106.0,12.5],[103.5,13.0],[103.0,17.5],[100.0,17.5],[98.0,13.5],[82.0,13.5],[77.0,17.5],[76.0,12.5],[71.0,16.5],[70.0,11.5],[66.0,15.5],[63.5,14.0],[63.0,9.5],[60.0,13.5],[59.5,9.0],[55.0,6.5],[51.0,10.5],[50.5,5.0],[48.0,5.5],[47.0,2.5],[44.0,5.5],[41.64,0.0],[151.83,0.0],[151.0,2.5],[148.5,1.0],[148.0,5.5],[143.0,7.5],[140.0,3.5],[132.0,5.5],[131.0,8.5],[128.0,6.5],[127.5,12.0],[124.0,13.5],[120.0,9.5],[110.0,11.5],[109.0,17.5],[106.0,12.5]]],"kind":"urban"},{"poly":[[[37.0,1.5],[37.14,0.0],[39.0,0.0],[37.0,1.5]]],"kind":"urban"},{"poly":[[[157.0,3.5],[152.62,0.0],[158.17,0.0],[157.0,3.5]]],"kind":"urban"}],"roads":[],"centerlines":[],"buildings":[{"poly":[[[36.0,0.5],[35.0,0.5],[29.5,-5.0],[32.0,-6.5],[35.0,-6.5],[35.5,-4.0],[37.5,-4.0],[37.5,-2.0],[36.0,0.5]]],"height":9.1,"source":"district","speculative":false},{"poly":[[[168.0,0.5],[166.0,-0.5],[162.0,-0.5],[161.5,-3.0],[164.0,-3.5],[165.0,-4.5],[167.0,-4.5],[168.0,-2.5],[168.5,-5.0],[170.0,-5.5],[171.5,-3.0],[171.5,-1.0],[169.0,-0.5],[168.0,0.5]]],"height":14.9,"source":"district","speculative":false},{"poly":[[[43.0,5.5],[42.0,5.5],[39.0,2.5],[37.5,2.0],[41.0,-1.5],[43.5,1.0],[43.0,5.5]]],"height":9.0,"source":"district","speculative":false},{"poly":[[[152.0,5.5],[148.5,5.0],[148.5,1.0],[150.0,0.5],[151.0,2.5],[151.5,0.0],[154.0,-0.5],[155.5,3.0],[152.0,5.5]]],"height":9.7,"source":"district","speculative":false},{"poly":[[[50.0,9.5],[45.0,7.5],[43.5,6.0],[47.0,2.5],[48.0,5.5],[49.0,4.5],[50.5,5.0],[50.0,9.5]]],"height":6.4,"source":"district","speculative":false},{"poly":[[[128.0,12.5],[128.0,6.5],[130.0,6.5],[131.0,8.5],[132.0,5.5],[134.0,5.5],[138.0,3.5],[140.5,4.0],[141.5,6.0],[141.0,8.5],[139.0,9.5],[131.0,10.5],[128.0,12.5]]],"height":8.2,"source":"district","speculative":false},{"poly":[[[59.0,13.5],[54.0,11.5],[52.5,10.0],[52.5,9.0],[55.0,6.5],[56.0,8.5],[57.0,7.5],[58.0,9.5],[59.0,8.5],[59.5,9.0],[59.0,13.5]]],"height":7.9,"source":"district","speculative":false},{"poly":[[[110.0,17.5],[110.0,11.5],[113.0,11.5],[114.0,10.5],[117.0,10.5],[118.0,9.5],[120.5,10.0],[121.5,13.0],[120.0,14.5],[118.0,14.5],[114.0,16.5],[111.0,16.5],[110.0,17.5]]],"height":12.0,"source":"district","speculative":false},{"poly":[[[70.0,16.5],[68.0,16.5],[66.5,15.0],[66.5,14.0],[69.0,11.5],[70.5,12.0],[70.0,16.5]]],"height":7.9,"source":"district","speculative":false},{"poly":[[[76.0,17.5],[73.0,17.5],[71.5,16.0],[71.5,15.0],[74.0,12.5],[76.5,13.0],[76.0,17.5]]],"height":8.5,"source":"district","speculative":false},{"poly":[[[108.5,17.0],[103.5,17.0],[104.0,12.5],[106.5,13.0],[108.5,17.0]]],"height":13.3,"source":"district","speculative":false},{"poly":[[[79.5,13.5],[99.5,13.5],[99.5,18.5],[79.5,18.5],[79.5,13.5]]],"height":9.6,"source":"district","speculative":false}],"palms":[]}