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>
1 line
4.5 KiB
JSON
1 line
4.5 KiB
JSON
{"chunk":[5,10],"origin":[250,0],"land":[[[[243.0,144.5],[240.5,147.0],[241.5,149.0],[237.0,151.5],[232.5,147.0],[232.5,144.0],[229.5,139.0],[229.5,126.0],[231.5,122.0],[239.0,114.5],[242.0,117.5],[245.5,115.0],[243.5,110.0],[241.0,107.5],[235.0,107.5],[228.0,115.5],[223.0,115.5],[219.0,111.5],[209.0,116.5],[200.0,115.5],[192.5,108.0],[193.5,107.0],[190.5,102.0],[190.5,91.0],[192.5,86.0],[201.0,78.5],[211.0,77.5],[217.5,82.0],[221.5,88.0],[221.5,91.0],[217.0,93.5],[208.0,85.5],[204.0,86.5],[201.5,89.0],[200.5,93.0],[201.5,105.0],[204.0,107.5],[209.0,107.5],[214.0,102.5],[219.0,101.5],[223.0,105.5],[225.5,103.0],[231.5,82.0],[236.0,77.5],[240.0,77.5],[248.5,93.0],[250.0,97.75],[250.0,144.5],[243.0,144.5]],[[241.5,137.0],[241.5,128.0],[239.0,125.5],[236.5,128.0],[236.5,137.0],[239.5,139.0],[241.5,137.0]]],[[[249.5,84.0],[249.5,80.0],[250.0,79.5],[250.0,84.5],[249.5,84.0]]]],"surfaces":[],"roads":[{"poly":[[[245.0,144.5],[242.5,146.0],[240.0,151.5],[237.0,151.5],[232.5,147.0],[230.5,143.0],[229.5,139.0],[230.5,129.0],[229.5,126.0],[232.5,120.0],[238.0,114.5],[241.0,115.5],[243.5,114.0],[244.5,112.0],[243.5,110.0],[240.0,107.5],[238.0,108.5],[235.0,107.5],[231.5,110.0],[229.0,115.5],[221.0,115.5],[218.0,112.5],[209.0,116.5],[200.0,115.5],[192.5,108.0],[193.5,107.0],[190.5,102.0],[190.5,91.0],[193.5,84.0],[198.0,81.5],[200.0,78.5],[211.0,77.5],[216.0,79.5],[221.5,88.0],[221.5,91.0],[219.0,93.5],[212.0,91.5],[210.5,88.0],[207.0,85.5],[202.5,88.0],[200.5,93.0],[200.5,102.0],[202.5,106.0],[208.0,107.5],[214.0,102.5],[217.0,101.5],[223.0,102.5],[225.5,101.0],[231.5,82.0],[236.0,77.5],[240.0,77.5],[243.5,83.0],[246.0,84.5],[248.5,83.0],[250.0,79.7],[250.0,85.61],[249.0,85.5],[245.5,89.0],[248.5,93.0],[249.5,99.0],[250.0,100.12],[250.0,144.5],[245.0,144.5]]],"bridge":true}],"centerlines":[[[265.0,131.0],[246.0,131.0]],[[245.0,130.0],[245.0,125.0],[249.0,119.0],[249.0,112.0],[245.0,103.0],[239.0,99.0]],[[225.0,108.0],[237.0,99.0]],[[240.0,90.0],[254.0,82.0],[264.0,83.0]],[[245.0,131.0],[238.0,136.0],[239.0,148.0]],[[224.0,108.0],[202.0,111.0],[197.0,106.0],[195.0,96.0],[199.0,85.0],[203.0,82.0],[210.0,82.0],[216.0,88.0]]],"buildings":[{"poly":[[[210.0,114.5],[203.0,114.5],[202.0,113.5],[199.0,113.5],[198.5,112.0],[195.5,109.0],[195.5,108.0],[192.5,106.0],[193.5,104.0],[192.5,102.0],[192.5,92.0],[193.5,91.0],[193.5,88.0],[198.0,81.5],[204.0,78.5],[205.0,79.5],[213.0,79.5],[215.0,80.5],[219.5,85.0],[219.5,91.0],[218.0,92.5],[215.0,92.5],[213.5,91.0],[213.5,88.0],[211.0,85.5],[207.0,85.5],[206.0,84.5],[202.0,85.5],[200.5,87.0],[200.5,89.0],[199.5,90.0],[199.5,93.0],[198.5,94.0],[199.5,96.0],[199.5,104.0],[202.0,107.5],[203.0,107.5],[205.0,109.5],[209.0,109.5],[212.5,107.0],[214.0,102.5],[217.0,102.5],[219.5,104.0],[218.5,110.0],[214.0,113.5],[211.0,113.5],[210.0,114.5]]],"height":6.6,"source":"district","speculative":true},{"poly":[[[251.0,114.5],[246.5,113.0],[245.5,109.0],[244.0,106.5],[232.0,106.5],[230.5,108.0],[229.5,112.0],[228.0,114.5],[225.0,114.5],[222.5,113.0],[223.5,109.0],[224.5,108.0],[224.5,106.0],[225.5,105.0],[225.5,101.0],[227.5,99.0],[229.5,95.0],[231.5,87.0],[234.5,81.0],[236.0,79.5],[240.5,80.0],[242.5,84.0],[243.5,89.0],[246.5,93.0],[245.5,94.0],[248.5,98.0],[248.5,101.0],[251.5,107.0],[251.5,111.0],[253.5,112.0],[253.5,113.0],[251.0,114.5]],[[240.5,101.0],[241.5,100.0],[241.5,97.0],[239.5,94.0],[239.5,92.0],[238.0,90.5],[235.5,93.0],[234.5,97.0],[233.5,98.0],[236.0,101.5],[240.5,101.0]]],"height":8.9,"source":"district","speculative":true},{"poly":[[[238.0,149.5],[232.5,144.0],[231.5,136.0],[230.5,135.0],[230.5,133.0],[231.5,132.0],[230.5,131.0],[230.5,129.0],[231.5,128.0],[231.5,126.0],[234.5,121.0],[235.0,118.5],[239.5,119.0],[238.5,122.0],[237.0,122.5],[235.5,125.0],[236.5,126.0],[235.5,128.0],[235.5,139.0],[236.5,140.0],[236.5,143.0],[239.5,147.0],[239.5,148.0],[238.0,149.5]]],"height":8.6,"source":"district","speculative":true},{"poly":[[[245.0,143.5],[242.5,142.0],[243.5,141.0],[241.5,137.0],[241.5,128.0],[242.5,127.0],[242.5,121.0],[245.0,118.5],[246.0,119.5],[255.0,119.5],[257.5,121.0],[257.5,123.0],[259.5,127.0],[257.5,129.0],[257.5,132.0],[258.5,133.0],[259.5,138.0],[255.0,142.5],[246.0,142.5],[245.0,143.5]],[[249.0,129.5],[253.0,128.5],[254.5,126.0],[253.5,124.0],[248.0,123.5],[246.5,125.0],[247.5,126.0],[247.5,128.0],[249.0,129.5]],[[251.5,139.0],[254.5,137.0],[254.5,134.0],[252.0,132.5],[249.0,132.5],[248.0,133.5],[247.5,132.0],[246.0,131.5],[245.5,133.0],[247.5,134.0],[247.5,138.0],[249.0,139.5],[251.5,139.0]]],"height":7.4,"source":"district","speculative":true}],"palms":[]} |