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.9 KiB
JSON
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":[]} |