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>
This commit is contained in:
knsoandClaude Sonnet 5 committed 2026-09-12 17:23:31 +02:00
1 parent 062a9af2fd
commit 22ac8f530c
289 files changed
+194 -156

No files matched your search

+1 -1
View File
@@ -1 +1 @@
{"chunk":[2,10],"origin":[-500,0],"land":[[[0.0,250.0],[0.0,-0.0],[250.0,-0.0],[250.0,250.0],[0.0,250.0]]],"surfaces":[{"poly":[[60.0,208.5],[57.5,209.0],[55.5,158.0],[55.5,95.0],[53.5,65.0],[50.0,61.5],[5.0,59.5],[0.0,58.5],[0.0,51.94],[19.0,51.5],[51.0,53.5],[61.5,64.0],[63.5,96.0],[63.5,159.0],[65.5,177.0],[65.5,210.0],[64.0,211.5],[60.0,208.5]],"kind":"sand"},{"poly":[[0.0,13.7],[0.0,-0.0],[1.4,-0.0],[0.0,13.7]],"kind":"sand"},{"poly":[[57.5,224.0],[57.5,222.0],[60.0,220.5],[64.5,224.0],[66.5,235.0],[65.5,237.0],[65.88,250.0],[59.12,250.0],[57.5,224.0]],"kind":"sand"},{"poly":[[61.0,26.5],[56.5,21.0],[56.5,5.0],[61.0,0.5],[79.0,0.5],[85.5,6.0],[83.5,7.0],[84.5,23.0],[71.0,27.5],[61.0,26.5]],"kind":"urban"},{"poly":[[63.5,159.0],[61.5,64.0],[51.0,53.5],[1.5,51.0],[2.0,1.5],[49.5,2.0],[54.5,53.0],[61.5,60.0],[64.5,68.0],[67.0,210.5],[63.5,159.0]],"kind":"urban"},{"poly":[[222.5,2.0],[228.0,1.5],[235.0,5.5],[239.0,2.5],[250.0,7.13],[250.0,17.74],[222.5,2.0]],"kind":"urban"},{"poly":[[79.5,179.0],[80.5,152.0],[68.5,37.0],[68.5,30.0],[74.0,27.5],[76.5,28.0],[77.5,32.0],[89.5,150.0],[89.0,182.5],[79.5,179.0]],"kind":"urban"},{"poly":[[43.5,231.0],[47.5,226.0],[44.5,224.0],[44.5,216.0],[2.0,215.5],[1.5,209.0],[55.5,207.0],[55.0,192.5],[1.5,192.0],[2.0,125.5],[22.0,125.5],[22.5,129.0],[26.5,130.0],[26.5,177.0],[48.5,178.0],[47.5,110.0],[27.5,109.0],[47.5,104.0],[47.5,86.0],[1.5,85.0],[52.5,83.0],[51.0,67.5],[2.0,68.5],[2.0,58.5],[50.0,61.5],[54.5,70.0],[57.5,208.0],[51.5,211.0],[53.5,218.0],[46.5,221.0],[49.0,223.5],[55.0,217.5],[58.5,219.0],[59.25,250.0],[43.5,250.0],[43.5,231.0]],"kind":"urban"},{"poly":[[66.0,228.5],[68.5,230.0],[68.84,250.0],[66.48,250.0],[66.0,228.5]],"kind":"urban"},{"poly":[[79.5,209.0],[79.5,200.0],[83.5,197.0],[83.5,185.0],[87.0,183.5],[89.5,185.0],[87.5,187.0],[90.5,194.0],[87.5,195.0],[88.5,208.0],[79.5,209.0]],"kind":"urban"},{"poly":[[79.5,214.0],[83.0,211.5],[88.5,213.0],[87.33,250.0],[78.91,250.0],[79.5,214.0]],"kind":"urban"}],"roads":[{"poly":[[68.5,231.0],[59.5,220.0],[62.0,218.5],[65.0,221.5],[68.5,218.0],[67.0,215.5],[65.0,214.5],[63.0,215.5],[61.5,213.0],[66.0,211.5],[67.5,209.0],[67.5,184.0],[68.5,183.0],[66.5,174.0],[64.5,66.0],[61.5,59.0],[55.5,54.0],[54.5,49.0],[54.5,40.0],[52.5,30.0],[53.5,29.0],[52.5,28.0],[50.17,-0.0],[90.07,-0.0],[90.5,9.0],[91.5,10.0],[91.5,26.0],[93.5,35.0],[93.5,47.0],[94.5,48.0],[94.5,57.0],[96.5,66.0],[97.5,87.0],[100.0,90.5],[103.0,91.5],[119.0,86.5],[128.5,79.0],[137.5,66.0],[142.5,55.0],[145.5,44.0],[146.5,11.0],[151.0,2.5],[154.0,3.5],[157.5,-0.0],[160.5,-0.0],[157.5,4.0],[158.5,7.0],[162.5,10.0],[159.5,18.0],[165.0,23.5],[178.0,28.5],[180.5,27.0],[182.0,23.5],[184.0,22.5],[186.5,24.0],[185.5,29.0],[177.0,37.5],[154.0,53.5],[148.5,59.0],[144.5,66.0],[148.0,70.5],[151.0,71.5],[159.5,78.0],[159.5,80.0],[157.0,83.5],[155.0,83.5],[147.0,77.5],[141.0,75.5],[135.5,80.0],[133.0,85.5],[123.0,89.5],[118.0,93.5],[114.0,93.5],[108.0,97.5],[103.0,98.5],[99.5,102.0],[100.5,112.0],[101.5,113.0],[100.5,116.0],[102.5,124.0],[102.5,132.0],[103.5,133.0],[104.5,153.0],[105.5,154.0],[105.5,178.0],[104.5,179.0],[106.5,183.0],[103.5,187.0],[105.5,197.0],[109.0,198.5],[116.0,195.5],[117.0,197.5],[124.0,200.5],[125.0,199.5],[149.0,198.5],[154.0,196.5],[170.5,177.0],[171.5,173.0],[165.5,162.0],[161.0,157.5],[154.0,153.5],[152.0,153.5],[151.0,151.5],[147.0,150.5],[145.5,149.0],[145.5,145.0],[150.0,142.5],[152.5,138.0],[153.5,121.0],[155.5,113.0],[154.5,108.0],[158.0,106.5],[159.5,104.0],[158.5,102.0],[159.5,99.0],[157.5,96.0],[160.0,96.5],[163.5,94.0],[167.5,85.0],[177.5,75.0],[180.0,70.5],[186.0,67.5],[189.0,63.5],[193.0,62.5],[196.0,59.5],[198.0,59.5],[204.0,55.5],[206.0,56.5],[212.0,53.5],[220.0,53.5],[228.0,51.5],[237.0,52.5],[241.0,50.5],[243.0,46.5],[250.0,47.2],[250.0,56.5],[244.0,54.5],[239.0,54.5],[235.5,58.0],[234.5,76.0],[236.0,78.5],[240.0,80.5],[244.0,80.5],[250.0,83.73],[250.0,87.88],[246.5,94.0],[243.5,101.0],[243.5,105.0],[241.5,108.0],[248.5,120.0],[250.0,125.0],[250.0,135.74],[247.5,133.0],[245.5,130.0],[243.5,120.0],[238.5,113.0],[236.0,111.5],[231.0,112.5],[228.0,110.5],[222.0,111.5],[215.5,117.0],[214.5,119.0],[215.5,120.0],[214.5,121.0],[215.5,125.0],[211.5,129.0],[214.5,132.0],[215.5,135.0],[222.0,140.5],[229.0,141.5],[236.0,138.5],[240.0,139.5],[250.0,152.36],[250.0,158.57],[235.5,175.0],[238.0,178.5],[243.0,179.5],[244.5,183.0],[247.5,184.0],[249.5,183.0],[250.0,182.23],[250.0,202.69],[232.5,230.0],[234.0,233.5],[243.0,236.5],[250.0,242.94],[250.0,250.0],[236.9,250.0],[227.0,245.5],[214.0,246.5],[207.88,250.0],[188.5,250.0],[198.0,239.5],[204.0,235.5],[216.0,231.5],[222.5,225.0],[229.5,215.0],[233.5,206.0],[243.5,193.0],[244.5,190.0],[242.0,186.5],[235.0,185.5],[227.5,190.0],[223.5,200.0],[223.5,203.0],[221.5,206.0],[221.5,210.0],[217.5,218.0],[214.0,221.5],[204.0,223.5],[196.0,223.5],[192.0,225.5],[183.0,226.5],[177.5,229.0],[168.17,250.0],[159.5,250.0],[168.5,232.0],[167.5,230.0],[165.0,228.5],[143.0,227.5],[132.0,231.5],[127.5,240.0],[12Line truncated
{"chunk":[2,10],"origin":[-500,0],"land":[[[[0.0,250.0],[0.0,-0.0],[250.0,-0.0],[250.0,250.0],[0.0,250.0]],[[120.5,190.0],[111.0,180.5],[102.5,187.0],[109.0,191.5],[113.0,188.5],[118.5,194.0],[120.5,190.0]],[[87.5,183.0],[85.0,180.5],[79.0,180.5],[76.5,183.0],[82.5,188.0],[87.5,183.0]],[[60.5,214.0],[56.0,208.5],[52.5,212.0],[53.5,214.0],[51.5,216.0],[54.0,218.5],[58.5,218.0],[60.5,214.0]]]],"surfaces":[{"poly":[[[60.0,208.5],[57.5,209.0],[55.5,158.0],[55.5,95.0],[53.5,65.0],[50.0,61.5],[5.0,59.5],[0.0,58.5],[0.0,51.94],[19.0,51.5],[51.0,53.5],[61.5,64.0],[63.5,96.0],[63.5,159.0],[65.5,177.0],[65.5,210.0],[64.0,211.5],[60.0,208.5]]],"kind":"sand"},{"poly":[[[0.0,13.7],[0.0,-0.0],[1.4,-0.0],[0.0,13.7]]],"kind":"sand"},{"poly":[[[57.5,224.0],[57.5,222.0],[60.0,220.5],[64.5,224.0],[66.5,235.0],[65.5,237.0],[65.88,250.0],[59.12,250.0],[57.5,224.0]]],"kind":"sand"},{"poly":[[[61.0,26.5],[56.5,21.0],[56.5,5.0],[61.0,0.5],[79.0,0.5],[85.5,6.0],[83.5,7.0],[84.5,23.0],[71.0,27.5],[61.0,26.5]]],"kind":"urban"},{"poly":[[[63.5,159.0],[61.5,64.0],[51.0,53.5],[1.5,51.0],[2.0,1.5],[49.5,2.0],[54.5,53.0],[61.5,60.0],[64.5,68.0],[67.0,210.5],[63.5,159.0]]],"kind":"urban"},{"poly":[[[222.5,2.0],[228.0,1.5],[235.0,5.5],[239.0,2.5],[250.0,7.13],[250.0,17.74],[222.5,2.0]]],"kind":"urban"},{"poly":[[[79.5,179.0],[80.5,152.0],[68.5,37.0],[68.5,30.0],[74.0,27.5],[76.5,28.0],[77.5,32.0],[89.5,150.0],[89.0,182.5],[79.5,179.0]]],"kind":"urban"},{"poly":[[[43.5,231.0],[47.5,226.0],[44.5,224.0],[44.5,216.0],[2.0,215.5],[1.5,209.0],[55.5,207.0],[55.0,192.5],[1.5,192.0],[2.0,125.5],[22.0,125.5],[22.5,129.0],[26.5,130.0],[26.5,177.0],[48.5,178.0],[47.5,110.0],[27.5,109.0],[47.5,104.0],[47.5,86.0],[1.5,85.0],[52.5,83.0],[51.0,67.5],[2.0,68.5],[2.0,58.5],[50.0,61.5],[54.5,70.0],[57.5,208.0],[51.5,211.0],[53.5,218.0],[46.5,221.0],[49.0,223.5],[55.0,217.5],[58.5,219.0],[59.25,250.0],[43.5,250.0],[43.5,231.0]]],"kind":"urban"},{"poly":[[[66.0,228.5],[68.5,230.0],[68.84,250.0],[66.48,250.0],[66.0,228.5]]],"kind":"urban"},{"poly":[[[79.5,209.0],[79.5,200.0],[83.5,197.0],[83.5,185.0],[87.0,183.5],[89.5,185.0],[87.5,187.0],[90.5,194.0],[87.5,195.0],[88.5,208.0],[79.5,209.0]]],"kind":"urban"},{"poly":[[[79.5,214.0],[83.0,211.5],[88.5,213.0],[87.33,250.0],[78.91,250.0],[79.5,214.0]]],"kind":"urban"}],"roads":[{"poly":[[[68.5,231.0],[59.5,220.0],[62.0,218.5],[65.0,221.5],[68.5,218.0],[67.0,215.5],[65.0,214.5],[63.0,215.5],[61.5,213.0],[66.0,211.5],[67.5,209.0],[67.5,184.0],[68.5,183.0],[66.5,174.0],[64.5,66.0],[61.5,59.0],[55.5,54.0],[54.5,49.0],[54.5,40.0],[52.5,30.0],[53.5,29.0],[52.5,28.0],[50.17,-0.0],[90.07,-0.0],[90.5,9.0],[91.5,10.0],[91.5,26.0],[93.5,35.0],[93.5,47.0],[94.5,48.0],[94.5,57.0],[96.5,66.0],[97.5,87.0],[100.0,90.5],[103.0,91.5],[119.0,86.5],[128.5,79.0],[137.5,66.0],[142.5,55.0],[145.5,44.0],[146.5,11.0],[151.0,2.5],[154.0,3.5],[157.5,-0.0],[160.5,-0.0],[157.5,4.0],[158.5,7.0],[162.5,10.0],[159.5,18.0],[165.0,23.5],[178.0,28.5],[180.5,27.0],[182.0,23.5],[184.0,22.5],[186.5,24.0],[185.5,29.0],[177.0,37.5],[154.0,53.5],[148.5,59.0],[144.5,66.0],[148.0,70.5],[151.0,71.5],[159.5,78.0],[159.5,80.0],[157.0,83.5],[155.0,83.5],[147.0,77.5],[141.0,75.5],[135.5,80.0],[133.0,85.5],[123.0,89.5],[118.0,93.5],[114.0,93.5],[108.0,97.5],[103.0,98.5],[99.5,102.0],[100.5,112.0],[101.5,113.0],[100.5,116.0],[102.5,124.0],[102.5,132.0],[103.5,133.0],[104.5,153.0],[105.5,154.0],[105.5,178.0],[104.5,179.0],[106.5,183.0],[103.5,187.0],[105.5,197.0],[109.0,198.5],[116.0,195.5],[117.0,197.5],[124.0,200.5],[125.0,199.5],[149.0,198.5],[154.0,196.5],[170.5,177.0],[171.5,173.0],[165.5,162.0],[161.0,157.5],[154.0,153.5],[152.0,153.5],[151.0,151.5],[147.0,150.5],[145.5,149.0],[145.5,145.0],[150.0,142.5],[152.5,138.0],[153.5,121.0],[155.5,113.0],[154.5,108.0],[158.0,106.5],[159.5,104.0],[158.5,102.0],[159.5,99.0],[157.5,96.0],[160.0,96.5],[163.5,94.0],[167.5,85.0],[177.5,75.0],[180.0,70.5],[186.0,67.5],[189.0,63.5],[193.0,62.5],[196.0,59.5],[198.0,59.5],[204.0,55.5],[206.0,56.5],[212.0,53.5],[220.0,53.5],[228.0,51.5],[237.0,52.5],[241.0,50.5],[243.0,46.5],[250.0,47.2],[250.0,56.5],[244.0,54.5],[239.0,54.5],[235.5,58.0],[234.5,76.0],[236.0,78.5],[240.0,80.5],[244.0,80.5],[250.0,83.73],[250.0,87.88],[246.5,94.0],[243.5,101.0],[243.5,105.0],[241.5,108.0],[248.5,120.0],[250.0,125.0],[250.0,135.74],[247.5,133.0],[245.5,130.0],[243.5,120.0],[238.5,113.0],[236.0,111.5],[231.0,112.5],[228.0,110.5],[222.0,111.5],[215.5,117.0],[214.5,119.0],[215.5,120.0],[214.5,121.0],[215.5,125.0],[211.5,129.0],[214.5,132.0],[215.5,135.0],[222.0,140.5],[229.0,141.5],[236.0,138.5],[240.0,139.5],[250.0,152.36],[250.0,158.57],[235.5,175.0],[238.0,178.5],[243.0,179.5],[244.5,183.0],[247.5,184.0],[249.5,183.0],[250.0,182.23],[250.0,202.69],[232.5,230.0],[234.0,233.5],[243.0,236.5],[250.0,242.94],[250.0,250.0],[236.9,250.0],[227.0,245.5],[214.0,246.5],[207.88,250.0],[188.5,250.0],[198.0,239.5],[204.0,235.5],[216.0,231.5],[222.5,225.0],[229.5,215.0],[233.5,206.0],[243.5,193.0],[244.5,190.0],[Line truncated