fix(extract): Brücke braucht Nähe zu Wasser, nicht nur Ferne von Land
Fix-Runde 2 (Ruling 17). Nachmessung am echten Mosaik zeigte: 143 der 190 aus Fix-Runde 1 markierten Brücken (137.288 von 208.744 m² Fläche) hatten unter 10 % Wasser in ihrer Umgebung, darunter die beiden größten Stücke mit 2,4 % und 0,1 % Wasser. Das waren breite Kreuzungs- und Parkflächen an Land: ihre Mitte liegt allein deshalb weiter als LAND_REACH_PX von straßenfreiem Land entfernt, weil dort ringsum nur Straße ist – kein Bezug zu Wasser. Ein größeres LAND_REACH_PX heilt das nicht (ab 16 kippt der bestehende Test). Straßenstücke jenseits von "Land" zählen jetzt nur noch als Brücke, wenn sie zusätzlich innerhalb WATER_REACH_PX von Wasser liegen; neue Konstante WATER_REACH_PX = 8, am echten Mosaik kalibriert (6-10 ein stabiles Plateau bei ~40 Brücken, ab 14 bricht es weg und reißt wieder trockene Flächen mit). Regressionstest zuerst rot gesehen (test_wide_road_area_on_land_is_not_a_bridge), bestehende Tests unverändert und weiterhin grün. 17/17 Tests grün. Auf dem echten Mosaik: 475 Straßenstücke, 40 Brücken, größtes Brückenstück 12.588 m² – deckt sich mit den unabhängig ermittelten Referenzwerten der Prüfung. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
47c3cb98da
commit
120cafd7bf
2 files changed
+35
-2
No files matched your search
@@ -44,3 +44,15 @@ def test_crossing_roads_yield_separate_centerlines():
|
||||
labels[55:65, :] = CLASSES["strasse"]
|
||||
labels[:, 55:65] = CLASSES["strasse"]
|
||||
assert len(centerlines(labels)) >= 3 # Arme werden an der Kreuzung getrennt
|
||||
|
||||
def test_wide_road_area_on_land_is_not_a_bridge():
|
||||
"""Eine breite Kreuzungsfläche ohne Wasser in der Nähe ist nie eine Brücke.
|
||||
|
||||
Ihre Mitte liegt weiter als LAND_REACH_PX von straßenfreiem Land entfernt, weil
|
||||
dort nur Straße ist — das allein darf sie nicht zur Brücke machen.
|
||||
"""
|
||||
labels = np.full((120, 120), CLASSES["land"], dtype=np.uint8)
|
||||
labels[30:90, 30:90] = CLASSES["strasse"] # 60x60 Straßenfläche, kein Wasser
|
||||
pieces = road_polygons(labels)
|
||||
assert pieces
|
||||
assert not any(bridge for _, bridge in pieces)
|
||||
Reference in new issue
Block a user