0008-web-cockpit-camera-controls.md 2.7 KB


status: accepted

Web cockpit camera controls

驾驶舱三维地图使用显式相机控制契约:

  • 鼠标左键拖拽:在三维场景中执行摄像机平移;抓着地图拖 —— 拖右则画面右移、相机左移(与“相机跟着拖”相反,2026-09-17 维护者目视验收后裁定反转),不旋转、不缩放。
  • 鼠标右键拖拽:摄像机围绕“弹簧臂根部/旋转中心”做轨道旋转;旋转过程中不平移、不缩放。
  • 鼠标滚轮:只改变摄像机与旋转中心的距离,即弹簧臂长度;靠近或远离场景目标,不改变中心点,不旋转。
  • 三类交互都 SHALL 带阻尼(2026-09-17 维护者追加):输入先落到“目标态”,相机实际态按帧率无关的指数收敛(1 − e^(−dt/τ),τ 见 domain/camera.js 的 DAMPING_TAU_MS)逐步跟上,起步渐入、松手有余韵,停稳后吸附到目标;阻尼只改变到达过程的形状,不改变方向与位移量。
  • Cesium 默认左键旋转、滚轮缩放等行为 SHALL 被替换;相机控制应集中在地图服务层,而不是散落在页面组件中。

旋转中心(弹簧臂根部)的定义:

  • 选中监测点或设备时,中心是该对象的地表高程点(对象高程 + 0;定位视角的中心按实测地形,票 30 口径)。
  • 未选中任何对象时,中心是地面拾取点(屏幕中心对应的椭球/地形交点)。
  • 右键按下时锁定当时的中心,拖拽过程中不重新拾取。
  • 从无选中到选中监测点时,镜头平滑飞向该点位的定位视角:中心 + heading/pitch/range 一起换(数值与配置入口见 .scratch/cockpit-point-locate-and-device-link 的票 03;缺省 heading 0 / pitch −55 / range 500 m;取消选中或关闭详情不回退,换点位直接从当前视角飞向下一个定位视角)。
  • 从无选中到选中非监测点对象(未关联设备、事件等)时,或手动三键操作(右键轨道 / 滚轮 / 左键平移)时,中心规则不变:只换中心,保持当前 heading 与 range。
  • 取消选中不立即回退中心或视角;左键平移才把中心更新为地面拾取点。

弹簧臂以 camera.lookAtTransform(中心东北天局部系, HeadingPitchRange) 表达,因此中心必须是局部地表点,不能是场景或城市原点。

地面/管线视图对相机的影响:管线视图压低弹簧臂、加大 pitch 并把 pitch 下限放宽到允许平视或轻微仰视,同时把管线图层提到可见、把地形与 3D Tiles 压成半透明。切换视图不重置旋转中心,也不新增第二套鼠标绑定。

主场景区的区域限位与进出状态机见 ADR 0009。