67 lines
3.0 KiB
Markdown
67 lines
3.0 KiB
Markdown
# Native Road Control Markings Design
|
|
|
|
## Architecture
|
|
|
|
The native compiler remains the source of truth. It extends its canonical OSM
|
|
parse with marked crossing nodes, then derives two additive polygon layers from
|
|
the crossing evidence, native directed lanes, and native junction plans:
|
|
|
|
```text
|
|
OSM crossing node + native directed lane centerlines + junction plans
|
|
|
|
|
+-- crosswalks.geojson: six zebra stripe polygons per safe crossing
|
|
|
|
|
+-- vehicle_stop_lines.geojson: one safe approach stop-line polygon
|
|
```
|
|
|
|
No osm2streets GeoJSON is read. Existing crossing geometry helpers may be
|
|
extracted or adapted only when they operate on native lane data and retain
|
|
native provenance.
|
|
|
|
## Source And Placement
|
|
|
|
- A source node is eligible only when `highway=crossing` and
|
|
`crossing:markings` is not `no`, `none`, or `unmarked`.
|
|
- The compiler finds native roads containing the crossing's OSM node and uses
|
|
the nearest compatible directed lane centerline to obtain the road tangent.
|
|
- Crosswalk stripes are perpendicular to that tangent and constrained to the
|
|
native road width. Existing fixed zebra dimensions are retained initially:
|
|
six 0.45m stripes with 0.45m gaps, 0.45m stripe width, and a highway-based
|
|
stripe length.
|
|
- A stop line is generated only when the crossing can be associated with a
|
|
supported junction approach and a safe outside-of-junction side. Otherwise
|
|
the crosswalk may remain valid but the missing stop line is diagnostic.
|
|
- Duplicate nearby crossing nodes use a stable cluster representative so one
|
|
physical crosswalk does not produce duplicate stripes.
|
|
|
|
## Contracts
|
|
|
|
`layers/crosswalks.geojson` and `layers/vehicle_stop_lines.geojson` are Polygon
|
|
FeatureCollections. Each feature records its crossing OSM node, source OSM way,
|
|
native directed road/lane when available, direction, placement method, and
|
|
`native-road-crosswalk/v1` or `native-road-stop-line/v1` provenance.
|
|
|
|
The Workbench API returns both layers as `state.layers.crosswalks` and
|
|
`state.layers.vehicleStopLines`. Its browser map uses separate toggleable
|
|
layers and selection evidence; the scene-preview toggle leaves real control
|
|
markings visible.
|
|
|
|
`catalog.NATIVE_ROAD_LAYERS` maps the sources to existing `crosswalks` and
|
|
`vehicle_stop_lines` material layers. This native adapter must not add them to
|
|
the osm2streets `ROAD_LAYERS` / `SCENE_LAYERS` registry.
|
|
|
|
## Compatibility And Rollback
|
|
|
|
The new files are additive under `native-road/layers/`. Existing osm2streets
|
|
output and QGIS input are unchanged. Selecting `--road-provider osm2streets`
|
|
remains rollback. A native Blender build treats a missing new layer as an error
|
|
rather than silently omitting a visible marking.
|
|
|
|
## Risks
|
|
|
|
- Crossing nodes can be detached from a routable road or lie on an ambiguous
|
|
multi-road segment. These become diagnostics rather than guessed geometry.
|
|
- A physical crossing split into several OSM nodes must deduplicate stably.
|
|
- A crosswalk near a non-supported junction may get stripes but no valid stop
|
|
line; this difference must be exposed in workbench provenance.
|