Files
osmWorkflow/.trellis/tasks/archive/2026-08/08-08-cesium-lane-centered-route/research/osm2streets-lane-centers.md

2.1 KiB
Raw Blame History

osm2streets 车道中心线研究

上游实现

  • 调研版本:osm2streets-js-node 0.1.4,上游 osm2streets commit fc119c47dac567d030c6ce7c24a48896f58ed906
  • Road::get_untrimmed_center_line() 先根据 OSM reference line、reference_line_placement、道路总宽度和驾驶方向生成 road full-width centerline。
  • Road::get_lane_center_lines()lane_specs_ltr 从左到右累计真实 lane width再调用 center_line.shift_from_center(total_width, width_from_left_side) 生成每条 lane 的中心线。
  • to_lane_polygons_geojson() 先取得上述 lane centerline再调用 pl.make_polygons(lane.width) 生成 Driving polygon。因此 lane polygon 是 lane centerline 的派生产物。
  • PolyLine::make_polygons() 使用两侧等距平移和 miter 交点生成 polygon ringring 前半边与反向后的后半边一一对应,其中点可恢复原始 lane centerline。

当前区域审计

  • 54 个 Driving polygon32 个四边形,其余包含 6/8/10/18 个非闭合顶点。
  • 使用 network.jsonroad.center_linelane_specs_ltr 和 geom miter 算法重建所有 lane centerline。
  • scripts/lib/lane-geometry.js:laneCenterline() 结果逐点比较,最大误差为 0.006 m
  • 结论:道路区间的 polygon 中轴提取与 osm2streets 权威 lane centerline 一致,不是肉眼所见大偏移的来源。

路口 movement 限制

  • osm2streets 的公开 JS API 没有导出可直接用于车辆行驶的 lane-to-lane movement centerline。
  • debugMovementsFromLaneGeojson() 只是调试箭头:在双向 road centerline 上使用固定 1.3 m 偏移,再用直线连接 road endpoints它不是 lane-aware 仿真轨迹,不能复用。
  • 当前项目的大偏移排查应限定在selected lane 与 internal road 的映射、junction connector、U-turn以及多条闭环 route 同时显示造成的视觉混淆。
  • 后续 connector 必须显式关联 network.json 的 internal road/intersection并受 intersection_surface.geojson 约束;不得修改已验证的 lane section centerline。