feat(extract): Pipeline baut Straßen aus dem Graphen
run.py baut jetzt aus dem Straßengraphen (Tasks 3-11) statt aus den nachgezeichneten Straßenrändern: Fahrbahn, Bordstein, Gehweg und Restflächen aus build_street(), amerikanische Markierungen aus markings(). fit_to_carriageway() bringt Bodenplatte und Beläge auf dasselbe Loch wie die Fahrbahn und hält Palmen dabei von ihr fern - nach derselben Regel, mit der apply_street() sie schon von der Jefferson Avenue fernhält. split_by_chunk_all() bekommt dafür eine parametrisierbare Splittergrenze: Ein Strich der gestrichelten Linien ist 3 m x 10 cm = 0,3 m² und wäre an der bisherigen 0,5-m²-Grenze für Flächen verschwunden. Markierungen laufen deshalb über den neuen Helfer chunk_markings() mit eigener, kleinerer Grenze; alle anderen Aufrufer bleiben bei 0,5 m². Am echten Netz gemessen: 1.537 Knoten, 1.790 Kanten, 830 Bordsteinstücke, 171 Restflächen, 22.394 Markierungen, 56 Palmen an der Fahrbahn entfernt. Fahrbahn-, Gehweg- und Restflächen sowie die Bordsteinlänge treffen die vorab am echten Netz gemessenen Erwartungswerte auf 0,03-0,3 % genau. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
892558fc50
commit
2201be37bd
3 files changed
+181
-15
No files matched your search
@@ -130,16 +130,20 @@ def chunk_box_of(i: int, j: int) -> Polygon:
|
||||
return chunk_box(i, j)
|
||||
|
||||
|
||||
def split_by_chunk_all(polys, i: int, j: int):
|
||||
"""Alle Anteile der übergebenen Polygone, die in Chunk (i, j) liegen."""
|
||||
def split_by_chunk_all(polys, i: int, j: int, min_area: float = 0.5):
|
||||
"""Alle Anteile der übergebenen Polygone, die in Chunk (i, j) liegen.
|
||||
|
||||
min_area verwirft die Splitter, die beim Zuschneiden an der Chunkgrenze entstehen. 0,5 m² passt
|
||||
für Flächen; Markierungen sind kleiner und brauchen eine eigene Grenze (run.py, chunk_markings).
|
||||
"""
|
||||
cell = chunk_box(i, j)
|
||||
for poly in polys:
|
||||
part = poly.intersection(cell)
|
||||
if not part.is_empty and part.area > 0.5:
|
||||
if not part.is_empty and part.area > min_area:
|
||||
if part.geom_type == "Polygon":
|
||||
yield part
|
||||
else:
|
||||
yield from (g for g in part.geoms if g.geom_type == "Polygon" and g.area > 0.5)
|
||||
yield from (g for g in part.geoms if g.geom_type == "Polygon" and g.area > min_area)
|
||||
|
||||
|
||||
def in_chunk(point, i: int, j: int) -> bool:
|
||||
|
||||
Reference in new issue
Block a user