fix(extract): carriageway_area() liefert immer MultiPolygon, Kreuzungstest schärfen
Zwei Befunde aus der Prüfung: unary_union() vereinte eine einzelne zusammenhängende Kreuzung zu einem einfachen Polygon statt des zugesagten MultiPolygon (bricht an kleinen Prüfkörpern, nicht am echten Netz mit seinen 213 Teilen - deshalb bisher unbemerkt). Normalisiert jetzt auf MultiPolygon, mit Testzusicherung an der zusammenhängenden kreuzung()-Fixture. test_zwei_parallele_strassen_verschmelzen_nicht bewachte nichts: alle vier Knoten hatten Grad 1, junction_area() lief nie. Fixture bekommt jetzt an beiden Straßen einen Querarm (Grad 3), damit das Schließen tatsächlich ausgeführt wird, während die Straßen getrennt bleiben. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
f91b5ab7c6
commit
ee07a6bf2a
2 files changed
+27
-6
No files matched your search
@@ -10,7 +10,7 @@ from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass
|
||||
|
||||
from shapely.geometry import LineString, Point
|
||||
from shapely.geometry import LineString, MultiPolygon, Point
|
||||
from shapely.ops import substring, unary_union
|
||||
|
||||
from .roads import CLASS_WIDTH, Graph
|
||||
@@ -115,4 +115,10 @@ def carriageway_area(graph: Graph):
|
||||
parts = [band for k in range(len(graph.edges)) if (band := ribbon(graph, k)) is not None]
|
||||
parts += [area for node in range(len(graph.nodes)) if graph.degree(node) >= 3
|
||||
and (area := junction_area(graph, node)) is not None]
|
||||
return unary_union(parts)
|
||||
vereint = unary_union(parts)
|
||||
if vereint.is_empty:
|
||||
return MultiPolygon()
|
||||
# Zusage der Schnittstelle: immer MultiPolygon. unary_union() liefert bei zusammenhängender
|
||||
# Eingabe ein einfaches Polygon, und Task 7 iteriert über .geoms — das bricht dann an kleinen
|
||||
# Prüfkörpern, aber nicht am echten Netz, also genau da, wo niemand damit rechnet.
|
||||
return vereint if vereint.geom_type == "MultiPolygon" else MultiPolygon([vereint])
|
||||
Reference in new issue
Block a user