11-overlapping-device-points.md 9.6 KB

重叠设备点位的呈现与拾取

Type: grilling Status: resolved Labels: wayfinder:grilling Blocked by: 05

进度:100%

讨论已完成,维护者已确认 Q1–Q9(两轮 grilling);resolved 表示本票决策完成,不表示重叠聚合呈现或展开环已经实现。实现仍受票 09 的设备级坐标/状态契约或明确降级约束;视觉/反应/资产由票 06/07/10 与 14/15/16 号规格约束。

下一步:本票结论已通过 /to-spec 固化为同一张 map 的 17 号重叠设备点位呈现与拾取规格;实现时与 14/15/16 号规格合并消费。

Question

01 已查明的事实:设备与监测点各存一份独立经纬度(monitor_point 与 equipment_base 各自成列),关联表 equipment_point_rel 只有 equipment_id/point_id —— 后端没有任何相对位置信息(同井/同杆/杆塔/安装高度/朝向 grep 0 命中),且后端不保证也不校验设备坐标与点位坐标相等;同时 CONTEXT.md 明确禁止「人工坐标偏移」把对象当成真实监测点。

因此「一个监测点下 N 台设备坐标相同或极近」是必须预先设计的可能形态;当前无逐台位置样本证明真实重叠比例。若确实同屏重叠,scene.pick 只回最上层一个,逐台点选需要额外的呈现/选择策略。

请裁决:

  1. 画什么:N 台完全同坐标时 —— ① 只画一个聚合符号(带计数)?② 按角度扇形摊开(这是视觉分离,必须写清它与 CONTEXT.md「人工坐标偏移」禁令的边界在哪一句上)?③ 只画状态最高的一台 + 「+N」徽标?④ 根本不画设备点、只用面板清单(若如此,需求②要重新谈)?
  2. 拾取:drillPick(01 指出它靠改 show 实现、会与特效独立开关互相干扰)?聚合符号点击后展开成可选择的环/列表?还是面板 → 三维单向联动(三维不反选,那需求④的双向性要删掉一半)?
  3. 与票 06 的分工:本票定「重叠时画什么、怎么点到具体那一台」;票 06 定「选中后的表现语言」。边界写清楚,别两票各定一半。
  4. 计数口径:聚合符号的计数如何与票 05 的独立关联设备图例、关联总数和实际已绘制数量对应?票 09 的八行摘要图例不混入关联设备;票 05 已定默认全画坐标准入有效设备,不默认截前 N 台。
  5. 极端量级:单点位设备台数的真实上限;超过多少台必须降级;降级后如何如实表达「还有更多」(不许静默丢,也不许把没画出来的算进「已上图」计数 —— 票 07 的「不上图 ≠ 不存在」同一条纪律)。

Answer

维护者复验修订:聚合入口持续可见(优先于旧收起规则)

维护者确认新流程:监测点显示名称;关联设备聚合符号显示清晰的“聚合 K 台”。hover 高亮入口并瞬态预览,点击固定展开圈且聚合入口半透明暗淡,不直接隐藏。点展开子设备后,真实设备成为中心表层入口,设备详情及连接短线锚向该设备,镜头按设备档定位;设备仍有聚合 hover/click 能力,可再展开并切换同组其他设备。清空选择或返回摘要才恢复无设备身份的聚合符号。

此规则取代“点击子设备收起并隐藏所有设备”及“固定展开隐藏聚合符号”的旧条款。真实设备编码与业务归属不变,只有屏幕呈现和入口变化;不改经纬度、不新增虚构设备。K>maxFan 仍保留总数及清单,选中设备即使来自清单尾部也保证中心可见。旧条款保留为历史。

目标与边界

  • 本票裁决同一监测点下多台监测设备坐标相同或极近时的呈现与拾取;触发前提是票 05 的关联监测设备图层(选中监测点才加载),本票不重开 05/06/07/10 已锁语义。
  • 「重叠」指设备坐标相同或极近到屏幕不可分辨;只处理同一监测点下的设备,不接管跨点位聚合(map Out of scope 已锁)。
  • 纪律不变:不伪造设备真实位置。聚合符号与展开环是纯渲染层的呈现/分离手段——不持久化、不参与空间推理(相机居中、引线长度计算等)、不写进任何「设备真实位置」语义;CONTEXT.md 的「人工坐标偏移」禁令对象是伪造数据位置,视觉摊开不触碰它。

画什么(Q1)

  • 静止态=一个重叠聚合符号:取本点可绘制设备中最高优先级状态的色/形 + 计数徽标(=K,口径见下);与 CONTEXT.md「点位聚合」词条同构,但对象是关联监测设备图层(不是摘要监测点)。
  • 交互态=展开环/扇形摊开:hover/click 聚合符号后,把 K 台设备在屏幕层摊开成可逐台点选的环/扇形(纯渲染层分离,地理坐标不变)。
  • 取舍:④(不画设备点只靠面板)被否——直接砍掉需求②;③(只画最高态+徽标)被聚合符号吸收;①+② 组合为最终形态。

拾取(Q2)

  • 不用 drillPick:02 调研已核它靠反复改 show 实现,会与票 07 特效/图层生命周期的独立开关互相干扰;摊开后每台设备各有屏幕位置,普通 pick 即可。
  • 展开环内逐台拾取走票 06 的 pickDeviceMarkerAt()(认 deviceCode)与「设备点优先、监测点兜底」链;三维点设备 → 面板反选成立,双向性不砍。
  • 聚合符号本身没有 deviceCode,不冒充任何一台设备;它只承担「打开展开环」这一个动作。

折叠态交互模型(Q6)

  • 沿用票 06 两档语义:hover 聚合符号=瞬态预览(环/扇形展开、不提交任何选中,离开即收);click 聚合符号=粘性展开(保持展开,直到「点中某台设备 / 点空白处 / 面板返回点位」才收)。
  • 点位在设备图层存在时已处于选中态(票 05),聚合符号 click 不承担选点位;回点位级走票 06「返回点位」。

与面板双向联动的接缝(Q7)

  • 面板 hover 设备卡片 → 三维只给聚合符号弱指向(如徽标轻闪/描边),不摊开;面板 click 选中卡片 → 才摊开环并高亮/强化那一台。
  • 摊开绑定「持久选中」而非「瞬态 hover」,避免面板扫卡就哗啦摊开;三维侧反选面板在环内点设备后照常成立。

与票 06/15 的分工(Q3)

  • 沿用票 15已写死的边界:引线退化(重叠不画引线)属 06 的选中表现语言;重叠时的 drillPick/展开/逐台拾取归本票。
  • 一条新增接缝:展开态下引线照票 06 逻辑画(连监测点标记中心,表达归属);「重叠引线退化」只约束未摊开(地理重合)场景。已补进票 15 边界备注,不重开 06。
  • 展开环内选中设备的反应语言(外环+放大+引线)、其余设备弱化(≥3 台压暗缩小)均沿用票 06,不在本票另造。

计数口径(Q4/Q8)

  • K=本点位上「当前可逐台绘制」的设备数(坐标准入 coordinateValidation.renderable === true 且属当前模式);N=关联总数(当前快照去重 deviceCodes)。两数语义固定,任何地方不出现单个数字冒充全量。
  • 聚合符号徽标=K;设备图例记 K,但文案明示「已上图(聚合呈现)K 台」,不写「逐台上图」——被聚合的设备不得虚报为逐台已上图(票 05/07 纪律)。
  • 未进入候选集的(无坐标 / 待确认 / 模式隐藏)单独列原因、不计入 K;面板清单如实列出全部 N 台与未上图原因。
  • 降级时(K>10)聚合符号、图例、面板清单三处同源:徽标 K、图例「聚合呈现 K」、清单「N 总计 + 原因」;被折叠的 K−10 台在清单中逐台可见,不静默消失。

极端量级(Q5)

  • 阈值=10(维护者定;区别于票 07 特效的 30 台降级,两套机制互不影响):K≤10 全量摊开逐台可点;K>10 降级——不摊开全量,保持聚合符号 + 显式「K 台设备(本屏显示 K 台 / 其余见清单)」形态。
  • 阈值放入 map 配置域:map.overlap.maxFan,缺省 10(与 map.effects.* 同构);真数留后续原型/走查现场校准(同 07/08 做法)。
  • 降级纪律(票 07 同款):不静默丢、不把未逐台画出的算进「已上图」。

可断言口径(Q9)

  • 新增只读宿主字段(走票 06 先例,不破坏既有 data-map-picked / data-map-device-picked / data-map-panel-selection / data-map-device-hovered):
    • data-map-overlap-state = collapsed|expanded|degraded
    • data-map-overlap-count = K(当前可逐台绘制数)
  • 观感数值(环半径、摊开角度、徽标样式)由实现/原型现场定,不在本票锁死。

后续

  • 本票只产决策不实现;实现归本图收口后的实现票,与 14/15/16 号规格合并消费,前提是票 09 设备级坐标/状态契约或明确降级方案。
  • 结论已同步:票 15 补边界备注;CONTEXT.md 新增「重叠聚合符号」词条;map 任务清单与 Decisions so far 已更新;规格已由 /to-spec 固化为 17 号重叠设备点位呈现与拾取规格。