--- 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](0009-primary-area-camera-limits-and-entry-state.md)。