2.1 KiB
2.1 KiB
osm2streets 车道中心线研究
上游实现
- 调研版本:
osm2streets-js-node 0.1.4,上游osm2streetscommitfc119c47dac567d030c6ce7c24a48896f58ed906。 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。