# 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 ring;ring 前半边与反向后的后半边一一对应,其中点可恢复原始 lane centerline。 ## 当前区域审计 - `54` 个 Driving polygon:`32` 个四边形,其余包含 `6/8/10/18` 个非闭合顶点。 - 使用 `network.json` 的 `road.center_line`、`lane_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。