feat(preview): add traffic signal visualization
This commit is contained in:
1
.trellis/tasks/08-05-cesium-traffic-signals/check.jsonl
Normal file
1
.trellis/tasks/08-05-cesium-traffic-signals/check.jsonl
Normal file
@@ -0,0 +1 @@
|
||||
{"_example": "Fill with {\"file\": \"<path>\", \"reason\": \"<why>\"}. Put spec/research files only — no code paths. Run `python3 .trellis/scripts/get_context.py --mode packages` to list available specs. Delete this line once real entries are added."}
|
||||
28
.trellis/tasks/08-05-cesium-traffic-signals/design.md
Normal file
28
.trellis/tasks/08-05-cesium-traffic-signals/design.md
Normal file
@@ -0,0 +1,28 @@
|
||||
# 设计:Cesium 路口信号灯可视化
|
||||
|
||||
## 边界
|
||||
|
||||
信号灯属于 Cesium 验证预览层,不进入 QGIS、GeoPackage、场景九图层、Blender 或主 GLB。
|
||||
区域构建只额外写入一个轻量的信号锚点 JSON;预览运行时读该 JSON 后以 Cesium 原生
|
||||
Entity/Primitive 构成灯杆、灯头和发光灯珠。
|
||||
|
||||
## 锚点与几何
|
||||
|
||||
中间阶段已有 `vehicle_stop_lines` 和 `intersection_surface`。信号锚点生成器将停止线的
|
||||
中点作为进口横向基准,依据相交路口面和停止线两端的方向判定来车朝向;灯杆置于停止线的
|
||||
侧后方、道路外缘一侧,且朝向来车。没有可唯一关联的路口面、停止线过短或无法确定外侧时,
|
||||
不输出锚点。
|
||||
|
||||
输出只保存区域局部 ENU 坐标、朝向和稳定 ID,避免浏览器重新解析 GeoJSON 或 OSM。每个
|
||||
路口按相对进口方向分为两组对向相位;首版统一循环绿、黄、全红切换。没有车辆等待逻辑。
|
||||
|
||||
## 预览交互
|
||||
|
||||
预览加载锚点 JSON 失败时记录 warning,场景、路线与车辆仍可用。加载成功时信号灯默认显示,
|
||||
并在现有 View 控件中提供独立 Signals 复选框。灯珠以 emissive 材质区分点亮和熄灭状态,
|
||||
不依赖环境光;灯杆用低多边形几何,避免增加外部模型资产。
|
||||
|
||||
## 风险与回退
|
||||
|
||||
信号灯是示意设施,不能视为 OSM 语义。复杂交叉口或人工修补后的不完整标线宁可跳过,也不
|
||||
摆放到行车道中央。删除新锚点输出及预览加载逻辑即可完整回退,不影响既有主 GLB 或路线 JSON。
|
||||
@@ -0,0 +1 @@
|
||||
{"_example": "Fill with {\"file\": \"<path>\", \"reason\": \"<why>\"}. Put spec/research files only — no code paths. Run `python3 .trellis/scripts/get_context.py --mode packages` to list available specs. Delete this line once real entries are added."}
|
||||
20
.trellis/tasks/08-05-cesium-traffic-signals/implement.md
Normal file
20
.trellis/tasks/08-05-cesium-traffic-signals/implement.md
Normal file
@@ -0,0 +1,20 @@
|
||||
# 实施计划:Cesium 路口信号灯可视化
|
||||
|
||||
1. 从现有停止线和路口面建立稳定的信号锚点生成器,输出区域局部坐标、朝向、路口与相位组。
|
||||
2. 将锚点 JSON 作为 preview 的可选支持文件写入区域输出与 preview manifest,不触及主 GLB。
|
||||
3. 在 Cesium 运行时加载可选锚点,构造立杆、灯头、红黄绿灯珠,并以统一相位时钟更新状态。
|
||||
4. 添加 Signals 显示开关和诊断摘要,保持加载降级语义与既有 Controls 的布局。
|
||||
5. 为锚点推导和预览配置/运行时编写针对性测试;构建目标区域并人工核对位置、朝向与相位。
|
||||
|
||||
## 验证
|
||||
|
||||
```bash
|
||||
npm run test:preview-assets
|
||||
node --check scripts/lib/cesium-preview.js
|
||||
npm run build:area -- --config config/areas/nantaizi-lake-innovation-valley.json --stages preview
|
||||
git diff --check
|
||||
```
|
||||
|
||||
## 回退
|
||||
|
||||
删除信号锚点的 preview 输出与浏览器加载代码;QGIS、GLB、车辆路线和原有预览功能不受影响。
|
||||
40
.trellis/tasks/08-05-cesium-traffic-signals/prd.md
Normal file
40
.trellis/tasks/08-05-cesium-traffic-signals/prd.md
Normal file
@@ -0,0 +1,40 @@
|
||||
# Cesium 路口信号灯可视化
|
||||
|
||||
## Goal
|
||||
|
||||
在 Cesium 预览中加入可直接观察的路口交通信号灯,使已完成的道路、停止线、斑马线、
|
||||
转向箭头和车辆巡航有清晰的交通控制参照。首轮以可见的灯具和相位切换为目标,不提前
|
||||
实现车辆等待或交通仿真。
|
||||
|
||||
## Confirmed Facts
|
||||
|
||||
- `scripts/lib/cesium-preview.js` 目前只加载场景资产、巡航路线与车辆;没有信号灯图层、
|
||||
模型或相位状态。
|
||||
- 路线 JSON 包含连续的左、右、直转向曲线,但没有路口 ID 或信号相位字段。
|
||||
- 现有停止线、斑马线和转向箭头已由区域构建确认,且用户要求暂不触及 QGIS 的人工修补
|
||||
边界、道路生成与既有连续路线逻辑。
|
||||
- Cesium 预览是验证层;改动它不应改变主 GLB、Blender 导出或 OSM/QGIS 产物。
|
||||
|
||||
## Requirements
|
||||
|
||||
- 在道路进口侧、停止线附近呈现简洁而可辨识的交通信号灯,并在不遮挡车道标线的前提下
|
||||
面向来车方向。
|
||||
- 红、黄、绿灯应有明确的点亮状态和周期性相位切换,使静态截图与实时预览都能看出其作用。
|
||||
- 信号灯应能独立显示/隐藏,遵循现有 Cesium 控件的克制设计语言。
|
||||
- 首轮不改变车辆路线、车速或等待行为;车辆仍按现有路线巡航。
|
||||
- 首版以主要路口的程序化示意灯覆盖为准:从已生成的停止线和路口面推导进口,缺少可靠
|
||||
几何锚点时跳过。它不宣称复刻 OSM 中逐节点标注的真实信号设施。
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
- [ ] 重建目标区域的 preview 后,Cesium 中可见至少一组位于路口进口侧的信号灯,位置与停止线/
|
||||
斑马线关系清楚,且不会漂浮在道路中央或遮挡车道箭头。
|
||||
- [ ] 灯组以可见状态呈现红、黄、绿的相位切换;未点亮灯珠明显较暗。
|
||||
- [ ] 页面提供独立的 Signals 显示开关,关闭后不影响场景、路线与车辆。
|
||||
- [ ] 不修改 QGIS 工程、道路/标线生成、现有路线 JSON 契约或车辆巡航行为。
|
||||
|
||||
## Notes
|
||||
|
||||
- Keep `prd.md` focused on requirements, constraints, and acceptance criteria.
|
||||
- Lightweight tasks can remain PRD-only.
|
||||
- For complex tasks, add `design.md` for technical design and `implement.md` for execution planning before `task.py start`.
|
||||
26
.trellis/tasks/08-05-cesium-traffic-signals/task.json
Normal file
26
.trellis/tasks/08-05-cesium-traffic-signals/task.json
Normal file
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"id": "cesium-traffic-signals",
|
||||
"name": "cesium-traffic-signals",
|
||||
"title": "Cesium 路口信号灯可视化",
|
||||
"description": "",
|
||||
"status": "in_progress",
|
||||
"dev_type": null,
|
||||
"scope": null,
|
||||
"package": null,
|
||||
"priority": "P2",
|
||||
"creator": "dingkang",
|
||||
"assignee": "dingkang",
|
||||
"createdAt": "2026-08-05",
|
||||
"completedAt": null,
|
||||
"branch": null,
|
||||
"base_branch": "main",
|
||||
"worktree_path": null,
|
||||
"commit": null,
|
||||
"pr_url": null,
|
||||
"subtasks": [],
|
||||
"children": [],
|
||||
"parent": null,
|
||||
"relatedFiles": [],
|
||||
"notes": "",
|
||||
"meta": {}
|
||||
}
|
||||
Reference in New Issue
Block a user