Task 6: leonida/emit.py (chunk_box, split_by_chunk, chunk_payload und die
Chunk-lokalen three.js-Koordinaten, write_chunks, write_debug_png) sowie
run.py als Ablaufsteuerung, die alles aus den Tasks 3-5 zu 144 Chunk-Dateien
und einem Manifest unter public/data/vice-a/ zusammenfuehrt.
Zwei Abweichungen vom Referenzcode der Aufgabe, beide durch Gegenrechnen
gegen die dort genannten Realwerte gefunden:
- test_emit.py::test_coordinates_are_chunk_local_three_js gab im Original
das ungeschnittene BIG (spannt vier Chunks) direkt an chunk_payload();
chunk_payload() clippt selbst nicht (das tut in run.py split_by_chunk_all
vorher), darum lag der Rand bei x=300 statt <=250 und der Test schlug mit
dem gegebenen Code fehl. Fix: BIG vor dem Aufruf mit split_by_chunk auf
Chunk (0,0) zuschneiden, wie es run.py fuer "land" ohnehin tut.
- run.pys Filter "Gebaeude, die zu >50% in einem Strassenpolygon liegen,
gelten als Strasse" pruefte im Original ALLE rohen Gebaeude gegen
road_polygons(labels) direkt. road_polygons() zaehlt "spekulativ" selbst
zu den Strassenklassen (ROAD_CLASSES) und schliesst zusaetzlich mit
disk(3) gegen Strassennamen; ein isoliertes "spekulativ"-Gebaeude
ueberlappt sich darueber praktisch mit sich selbst. Ergebnis am realen
Mosaik: von 267 rohen spekulativen Gebaeuden ueberlebten nur 3 (statt der
in der Aufgabe genannten Groessenordnung von 258), und die Schliessung
riss zusaetzlich 211 gewoehnliche graue Gebaeude mit heraus, die die
Notiz aus Task 5 ausdruecklich nicht meinte ("die ROTEN Flaechen ...
werden abgezogen"). Fix: eigenes, unzweideutiges Strassenmass nur aus
"strasse"/"weg" (ohne "spekulativ", ohne Namens-Schliessung), Pruefung
nur auf spekulative Kandidaten begrenzt. Ergebnis: 2.348 Gebaeude, davon
263 spekulativ (Aufgabe: 2.352 bzw. 258) - Wahrzeichenhoehen (68 Stueck,
31-248 m) und Palmenzahl (2.133) treffen die genannten Referenzwerte exakt.
Pipeline-Lauf am gecachten Mosaik: 144 Chunk-Dateien + Manifest, 2,5 MB
gesamt (Budget 10 MB), groesste Datei chunk_9_1.json/chunk_10_1.json mit
je 40 KB. Alle drei Toleranzgrenzen (wasser/strasse/gebaeude) eingehalten.
Debug-PNGs stichprobenartig gesichtet: Kuestenlinie, Strassennetz
(inklusive Kreuzungen und einer Auffahrt-Rampe) und ein Strand mit
Palmenreihe liegen deckungsgleich auf dem Mosaik; der wasserreine Chunk
(4,10) zeigt korrekt keine Vektoren.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
1 line
2.2 KiB
JSON
1 line
2.2 KiB
JSON
{"chunk":[3,4],"origin":[-250,-1500],"land":[[[52.0,215.5],[43.5,205.0],[45.5,175.0],[50.5,158.0],[54.5,150.0],[69.5,128.0],[86.0,107.5],[113.0,94.5],[120.0,89.5],[169.0,75.5],[185.0,67.5],[197.0,59.5],[210.0,43.5],[218.0,39.5],[250.0,37.04],[250.0,81.6],[230.0,106.5],[222.0,110.5],[201.0,114.5],[197.0,117.5],[186.0,121.5],[163.0,122.5],[127.0,132.5],[100.5,166.0],[82.5,204.0],[72.0,213.5],[59.0,216.5],[52.0,215.5]]],"surfaces":[{"poly":[[248.5,43.0],[250.0,42.25],[250.0,43.5],[248.5,43.0]],"kind":"sand"},{"poly":[[178.0,78.5],[177.5,77.0],[183.0,73.5],[190.0,72.5],[194.0,67.5],[202.5,62.0],[209.5,54.0],[212.0,48.5],[217.0,48.5],[218.5,45.0],[223.0,44.5],[224.0,41.5],[226.0,43.5],[234.0,43.5],[235.0,38.5],[238.0,43.5],[244.5,44.0],[237.0,47.5],[222.0,49.5],[212.0,62.5],[207.0,64.5],[196.0,73.5],[187.0,75.5],[183.0,78.5],[178.0,78.5]],"kind":"sand"},{"poly":[[74.5,202.0],[80.5,190.0],[80.5,186.0],[85.5,178.0],[87.5,168.0],[91.5,165.0],[91.5,161.0],[96.5,157.0],[105.5,139.0],[115.0,128.5],[139.0,118.5],[152.0,116.5],[155.0,113.5],[160.0,114.5],[167.0,112.5],[181.0,112.5],[192.0,109.5],[211.0,99.5],[220.0,97.5],[221.5,94.0],[219.5,92.0],[225.0,90.5],[233.0,83.5],[243.5,73.0],[244.5,69.0],[247.0,66.5],[250.0,67.5],[250.0,70.5],[248.5,75.0],[241.5,82.0],[233.5,93.0],[233.5,95.0],[225.0,103.5],[199.0,109.5],[185.0,116.5],[158.0,117.5],[152.0,120.5],[134.0,123.5],[123.0,128.5],[108.5,145.0],[107.5,149.0],[104.5,151.0],[98.5,160.0],[98.5,163.0],[93.5,167.0],[90.5,173.0],[90.5,179.0],[88.5,180.0],[89.0,181.5],[85.5,183.0],[83.5,191.0],[76.0,202.5],[74.5,202.0]],"kind":"sand"},{"poly":[[249.5,63.0],[250.0,62.5],[250.0,67.5],[249.5,63.0]],"kind":"sand"},{"poly":[[60.5,151.0],[60.5,147.0],[64.5,145.0],[72.5,132.0],[87.5,116.0],[90.0,111.5],[93.0,111.5],[95.0,108.5],[126.0,94.5],[130.0,90.5],[134.0,91.5],[137.0,88.5],[143.5,90.0],[143.0,91.5],[137.0,91.5],[133.0,95.5],[116.0,102.5],[109.0,107.5],[106.0,107.5],[95.0,112.5],[87.5,119.0],[86.0,123.5],[82.5,124.0],[80.5,131.0],[66.5,145.0],[62.0,152.5],[60.5,151.0]],"kind":"sand"},{"poly":[[48.5,203.0],[49.5,182.0],[51.5,172.0],[56.5,157.0],[59.0,153.5],[60.5,156.0],[60.5,171.0],[58.5,172.0],[57.5,180.0],[53.5,180.0],[51.5,189.0],[53.0,208.5],[48.5,203.0]],"kind":"sand"}],"roads":[],"centerlines":[],"buildings":[],"palms":[]} |