fix(extract): Schleifen-Kante bekommt zwei Stummel in junction_area()
incident() liefert eine Schleife (a == b) nur einmal, und edge.a == node ist bei ihr immer wahr - die zweite Abgangsrichtung bekam deshalb nie einen eigenen Arm im Kreuzungsfächer. Das war kein Schönheitsfehler, sondern ein Loch in der Fahrbahn genau dort, wo das zurückgeschnittene Schleifenband auf die Kreuzungsfläche trifft: 179 von 196 Schleifen sitzen an einem Knoten mit Grad >= 3 und waren betroffen. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
5ddcbbfc17
commit
f91b5ab7c6
2 files changed
+29
-5
No files matched your search
@@ -92,11 +92,18 @@ def junction_area(graph: Graph, node: int):
|
||||
arms = []
|
||||
for k in incident:
|
||||
edge = graph.edges[k]
|
||||
points = edge.points if edge.a == node else list(reversed(edge.points))
|
||||
line = LineString(points)
|
||||
stub = substring(line, 0.0, min(reach + 1.0, line.length))
|
||||
arms.append(stub.buffer(SECTION[edge.klass].carriageway / 2,
|
||||
cap_style="flat", join_style="mitre", mitre_limit=1.5))
|
||||
if len(edge.points) < 2:
|
||||
continue # Punktkanten haben keine Richtung; LineString wirft an ihnen
|
||||
# Eine Schleife hängt mit beiden Enden am selben Knoten und braucht deshalb zwei Stummel.
|
||||
# incident() liefert sie nur einmal, und edge.a == node ist bei ihr immer wahr — ohne den
|
||||
# zweiten Stummel bliebe an ihrem anderen Ende ein Loch in der Fahrbahn.
|
||||
richtungen = ([edge.points, list(reversed(edge.points))] if edge.a == edge.b
|
||||
else [edge.points if edge.a == node else list(reversed(edge.points))])
|
||||
for points in richtungen:
|
||||
line = LineString(points)
|
||||
stub = substring(line, 0.0, min(reach + 1.0, line.length))
|
||||
arms.append(stub.buffer(SECTION[edge.klass].carriageway / 2,
|
||||
cap_style="flat", join_style="mitre", mitre_limit=1.5))
|
||||
star = unary_union(arms)
|
||||
near = Point(graph.nodes[node].point).buffer(reach + FILLET + 2.0)
|
||||
rounded = star.buffer(FILLET, join_style="round").buffer(-FILLET, join_style="round")
|
||||
|
||||
Reference in new issue
Block a user