fix(extract): carriageway[].klasse als irreführendes Feld entfernt
Befund 6, Controller-Entscheidung: carriageway_area() vereinigt das ganze Straßennetz zu wenigen Zusammenhangskomponenten, und _classified() gab jeder Komponente die Klasse ihrer breitesten enthaltenen Straße - am echten Netz trugen dadurch 91,2 % der Fahrbahnfläche "boulevard", auch wo tatsächlich eine Wohnstraße lag. Kein Verbraucher las das Feld (Browser und Minimap färben die Fahrbahn einheitlich); die Klasse je Straße steht weiterhin in edges. _classified() samt Aufruf aus run.py entfernt, chunk_payload() nimmt carriageway jetzt als reine Liste von Polygonen statt (poly, klasse)- Tupeln entgegen, Sortierschlüssel entsprechend auf poly allein verkürzt. Fixtures in test_emit.py, test_overview.py, tests/geometry.test.js und tests/streaming.test.js sowie das Chunk-Format im Entwurf nachgezogen; tests/props.test.js bleibt unverändert, weil dort edges betroffen sind, nicht carriageway.
This commit is contained in:
1 parent
a397892847
commit
77d53fb170
7 files changed
+23
-37
No files matched your search
+1
-21
@@ -62,24 +62,6 @@ def chunk_markings(marks, i: int, j: int) -> list:
|
||||
for part in split_by_chunk_all([poly], i, j, min_area=MARKING_MIN_AREA)]
|
||||
|
||||
|
||||
def _classified(street, graph) -> list:
|
||||
"""Jede Fahrbahnfläche mit der Klasse der breitesten Kante, deren Mittelpunkt in ihr liegt.
|
||||
|
||||
Vorsicht beim Lesen des Felds: carriageway_area() verschmilzt das Netz zu wenigen
|
||||
zusammenhängenden Teilen, und ein Teil trägt dann die breiteste Klasse aller Straßen darin. Am
|
||||
echten Netz sind das 5 von 213 Teilen, aber 91 % der Fahrbahnfläche tragen "boulevard". Über
|
||||
die einzelne Straße sagt das Feld also wenig — die Klasse je Straße steht in edges. Heute liest
|
||||
es kein Verbraucher; Browser und Minimap färben die Fahrbahn einheitlich.
|
||||
"""
|
||||
mitten = [(e.klass, LineString(e.points).interpolate(0.5, normalized=True)) for e in graph.edges]
|
||||
out = []
|
||||
for poly in _pieces(street.carriageway):
|
||||
treffer = [klass for klass, mitte in mitten if poly.contains(mitte)]
|
||||
klass = max(treffer, key=lambda k: SECTION[k].carriageway) if treffer else "wohnstrasse"
|
||||
out.append((poly, klass))
|
||||
return out
|
||||
|
||||
|
||||
def main() -> None:
|
||||
cache = Path("cache")
|
||||
download_tiles(cache)
|
||||
@@ -156,7 +138,6 @@ def main() -> None:
|
||||
arten = dict(sorted(Counter(art for _, art in marks).items()))
|
||||
print(f"Straßen: {len(street.kerb)} Bordsteinstücke, {len(street.lots)} Restflächen, "
|
||||
f"{len(marks)} Markierungen {arten}, {palmen - len(world.palms)} Palmen an der Fahrbahn entfernt")
|
||||
classified = _classified(street, world.graph) # einmal, nicht je Chunk: 5,8 s am echten Netz
|
||||
|
||||
payloads = []
|
||||
for j in range(12):
|
||||
@@ -166,8 +147,7 @@ def main() -> None:
|
||||
land=list(split_by_chunk_all(world.land, i, j)),
|
||||
surfaces=[(part, kind) for (p, kind) in world.surfaces
|
||||
for part in split_by_chunk_all([p], i, j)],
|
||||
carriageway=[(part, klass) for poly, klass in classified
|
||||
for part in split_by_chunk_all([poly], i, j)],
|
||||
carriageway=list(split_by_chunk_all(_pieces(street.carriageway), i, j)),
|
||||
curb=[part for line in street.kerb
|
||||
for part in _clip_lines(line, chunk_box_of(i, j))],
|
||||
sidewalk=list(split_by_chunk_all(_pieces(street.sidewalk), i, j)),
|
||||
|
||||
Reference in new issue
Block a user